E v a l u a t i o n   W a r n i n g   :   T h e   d o c u m e n t   w a s   c r e a t e d   w i t h   S p i r e . P D F   f o r   . N E T . Evaluation Warning: The document was created with Spire.PDF for .NET
    E D I T I O N   v 2 . 1 . 0 1   D O W N L O A D   a v a i l a b l e   a t :   h t t p s : / / a k a . m s / w e b a p p e b o o k     P U B L I S H E D   B Y   D e v D i v ,   . N E T   a n d   V i s u a l   S t u d i o   p r o d u c t   t e a m s   A   d i v i s i o n   o f   M i c r o s o f t   C o r p o r a t i o n   O n e   M i c r o s o f t   W a y   R e d m o n d ,   W a s h i n g t o n   9 8 0 5 2 - 6 3 9 9   C o p y r i g h t   ©   2 0 1 7   b y   M i c r o s o f t   C o r p o r a t i o n   A l l   r i g h t s   r e s e r v e d .   N o   p a r t   o f   t h e   c o n t e n t s   o f   t h i s   b o o k   m a y   b e   r e p r o d u c e d   o r   t r a n s m i t t e d   i n   a n y   f o r m   o r   b y   a n y   m e a n s   w i t h o u t   t h e   w r i t t e n   p e r m i s s i o n   o f   t h e   p u b l i s h e r .   T h i s   b o o k   i s   p r o v i d e d   a s - i s   a n d   e x p r e s s e s   t h e   a u t h o r s   v i e w s   a n d   o p i n i o n s .   T h e   v i e w s ,   o p i n i o n s   a n d   i n f o r m a t i o n   e x p r e s s e d   i n   t h i s   b o o k ,   i n c l u d i n g   U R L   a n d   o t h e r   I n t e r n e t   w e b s i t e   r e f e r e n c e s ,   m a y   c h a n g e   w i t h o u t   n o t i c e .   S o m e   e x a m p l e s   d e p i c t e d   h e r e i n   a r e   p r o v i d e d   f o r   i l l u s t r a t i o n   o n l y   a n d   a r e   f i c t i t i o u s .   N o   r e a l   a s s o c i a t i o n   o r   c o n n e c t i o n   i s   i n t e n d e d   o r   s h o u l d   b e   i n f e r r e d .   M i c r o s o f t   a n d   t h e   t r a d e m a r k s   l i s t e d   a t   h t t p : / / w w w . m i c r o s o f t . c o m   o n   t h e   T r a d e m a r k s   w e b p a g e   a r e   t r a d e m a r k s   o f   t h e   M i c r o s o f t   g r o u p   o f   c o m p a n i e s .   A l l   o t h e r   m a r k s   a r e   p r o p e r t y   o f   t h e i r   r e s p e c t i v e   o w n e r s .     A u t h o r :       S t e v e   S m i t h   ( h t t p : / / a r d a l i s . c o m )   E d i t o r :     M a i r a   W e n z e l   P a r t i c i p a n t s   a n d   r e v i e w e r s :   C e s a r   d e   l a   T o r r e ,   . N E T   p r o d u c t   t e a m ,   M i c r o s o f t   S c o t t   H a n s e l m a n ,   . N E T   p r o d u c t   t e a m ,   M i c r o s o f t       Evaluation Warning: The document was created with Spire.PDF for .NET
      i     C o n t e n t s   I n t r o d u c t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1   V e r s i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1   P u r p o s e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2   W h o   s h o u l d   u s e   t h i s   g u i d e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2   H o w   y o u   c a n   u s e   t h i s   g u i d e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2   C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3   R e f e r e n c e   A p p l i c a t i o n :   e S h o p O n W e b   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3   C l o u d - H o s t e d   a n d   S c a l a b l e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4   C r o s s   P l a t f o r m   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4   M o d u l a r   a n d   L o o s e l y   C o u p l e d   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5   E a s i l y   T e s t e d   w i t h   A u t o m a t e d   T e s t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5   T r a d i t i o n a l   a n d   S P A   B e h a v i o r s   S u p p o r t e d   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5   S i m p l e   D e v e l o p m e n t   a n d   D e p l o y m e n t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6   T r a d i t i o n a l   A S P . N E T   a n d   W e b   F o r m s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S i n g l e   P a g e   A p p s   ( S P A s )   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7   P r o j e c t   T e m p l a t e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8   W h e n   t o   c h o o s e   t r a d i t i o n a l   w e b   a p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0   W h e n   t o   c h o o s e   S P A s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 1   D e c i s i o n   t a b l e     T r a d i t i o n a l   W e b   o r   S P A   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 3   A r c h i t e c t u r a l   P r i n c i p l e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 4   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 4   C o m m o n   d e s i g n   p r i n c i p l e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 4   S e p a r a t i o n   o f   C o n c e r n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 4   E n c a p s u l a t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 5   D e p e n d e n c y   I n v e r s i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 5   E x p l i c i t   D e p e n d e n c i e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 7   Evaluation Warning: The document was created with Spire.PDF for .NET
  i i   S i n g l e   R e s p o n s i b i l i t y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 7   D o n t   R e p e a t   Y o u r s e l f   ( D R Y )   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 8   P e r s i s t e n c e   I g n o r a n c e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 9   B o u n d e d   C o n t e x t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 0   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 1   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 1   W h a t   i s   a   m o n o l i t h i c   a p p l i c a t i o n ?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 1   A l l - i n - O n e   a p p l i c a t i o n s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 1   W h a t   a r e   l a y e r s ?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 2   T r a d i t i o n a l   N - L a y e r   a r c h i t e c t u r e   a p p l i c a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 4   C l e a n   a r c h i t e c t u r e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   2 8   M o n o l i t h i c   A p p l i c a t i o n s   a n d   C o n t a i n e r s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3 5   M o n o l i t h i c   a p p l i c a t i o n   d e p l o y e d   a s   a   c o n t a i n e r   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3 6   D o c k e r   s u p p o r t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   3 8   C o m m o n   C l i e n t - S i d e   W e b   T e c h n o l o g i e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 1   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 1   H T M L   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 1   C S S   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 2   J a v a S c r i p t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 3   L e g a c y   W e b   A p p s   w i t h   j Q u e r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 3   j Q u e r y   v s   a   S P A   F r a m e w o r k   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 3   A n g u l a r   S P A s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 4   R e a c t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 5   C h o o s i n g   a   S P A   F r a m e w o r k   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 5   D e v e l o p i n g   A S P . N E T   C o r e   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 7   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 7   M V C   a n d   R a z o r   P a g e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 7   W h y   R a z o r   P a g e s ?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 8   W h e n   t o   u s e   M V C   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 9   M a p p i n g   R e q u e s t s   t o   R e s p o n s e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4 9   W o r k i n g   w i t h   D e p e n d e n c i e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5 1   D e c l a r e   Y o u r   D e p e n d e n c i e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5 3   S t r u c t u r i n g   t h e   A p p l i c a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5 4   F e a t u r e   O r g a n i z a t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5 5   C r o s s - C u t t i n g   C o n c e r n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5 7   S e c u r i t y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 0   A u t h e n t i c a t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 0   A u t h o r i z a t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 2   Evaluation Warning: The document was created with Spire.PDF for .NET
  i i i   C l i e n t   C o m m u n i c a t i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 5   D o m a i n - D r i v e n   D e s i g n     S h o u l d   Y o u   A p p l y   I t ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 6   W h e n   S h o u l d   Y o u   A p p l y   D D D   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 7   W h e n   S h o u l d n t   Y o u   A p p l y   D D D   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 7   D e p l o y m e n t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6 8   W o r k i n g   w i t h   D a t a   i n   A S P . N E T   C o r e   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 0   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 0   E n t i t y   F r a m e w o r k   C o r e   ( f o r   r e l a t i o n a l   d a t a b a s e s )   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 0   T h e   D b C o n t e x t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 1   C o n f i g u r i n g   E F   C o r e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 1   F e t c h i n g   a n d   S t o r i n g   D a t a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 3   F e t c h i n g   R e l a t e d   D a t a   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 4   E n c a p s u l a t i n g   D a t a   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 5   R e s i l i e n t   C o n n e c t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 6   E F   C o r e   o r   m i c r o - O R M ?   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   7 8   S Q L   o r   N o S Q L   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 0   A z u r e   C o s m o s   D B   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 1   O t h e r   P e r s i s t e n c e   O p t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 2   C a c h i n g   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 2   A S P . N E T   C o r e   R e s p o n s e   C a c h i n g   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 3   D a t a   C a c h i n g   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 3   T e s t i n g   A S P . N E T   C o r e   M V C   A p p s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 7   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 7   K i n d s   o f   A u t o m a t e d   T e s t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 7   U n i t   T e s t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 7   I n t e g r a t i o n   T e s t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 8   F u n c t i o n a l   T e s t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   8 9   T e s t i n g   P y r a m i d   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 0   W h a t   t o   T e s t   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 1   O r g a n i z i n g   T e s t   P r o j e c t s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 1   T e s t   N a m i n g   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 3   U n i t   T e s t i n g   A S P . N E T   C o r e   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 4   I n t e g r a t i o n   T e s t i n g   A S P . N E T   C o r e   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 6   F u n c t i o n a l   T e s t i n g   A S P . N E T   C o r e   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   9 6   D e v e l o p m e n t   p r o c e s s   f o r   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p l i c a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 0   V i s i o n   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 0   D e v e l o p m e n t   e n v i r o n m e n t   f o r   A S P . N E T   C o r e   a p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 0   D e v e l o p m e n t   t o o l s   c h o i c e s :   I D E   o r   e d i t o r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 0   Evaluation Warning: The document was created with Spire.PDF for .NET
  i v   D e v e l o p m e n t   w o r k f l o w   f o r   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 1   I n i t i a l   S e t u p   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 1   W o r k f l o w   f o r   d e v e l o p i n g   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p l i c a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 3   R e f e r e n c e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 4   A z u r e   H o s t i n g   R e c o m m e n d a t i o n s   f o r   A S P . N E T   C o r e   W e b   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 5   S u m m a r y   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 5   W e b   A p p l i c a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 5   A p p   S e r v i c e   W e b   A p p s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 6   C o n t a i n e r s   a n d   A z u r e   C o n t a i n e r   S e r v i c e   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 6   A z u r e   S e r v i c e   F a b r i c   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 7   A z u r e   V i r t u a l   M a c h i n e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 7   L o g i c a l   P r o c e s s e s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 8   D a t a   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 8   A r c h i t e c t u r e   R e c o m m e n d a t i o n s   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   1 0 8       Evaluation Warning: The document was created with Spire.PDF for .NET
      1     C h a p t e r   1   I n t r o d u c t i o n         S E C T I O N       1       I n t r o d u c t i o n   . N E T   C o r e   a n d   A S P . N E T   C o r e   o f f e r   s e v e r a l   a d v a n t a g e s   o v e r   t r a d i t i o n a l   . N E T   d e v e l o p m e n t .   Y o u   s h o u l d   u s e   . N E T   C o r e   f o r   y o u r   s e r v e r   a p p l i c a t i o n s   i f   s o m e   o r   a l l   o f   t h e   f o l l o w i n g   a r e   i m p o r t a n t   t o   y o u r   a p p l i c a t i o n s   s u c c e s s :     C r o s s - p l a t f o r m   s u p p o r t     U s e   o f   m i c r o s e r v i c e s     U s e   o f   D o c k e r   c o n t a i n e r s     H i g h   p e r f o r m a n c e   a n d   s c a l a b i l i t y   r e q u i r e m e n t s     S i d e - b y - s i d e   v e r s i o n i n g   o f   . N E T   v e r s i o n s   b y   a p p l i c a t i o n   o n   t h e   s a m e   s e r v e r   T r a d i t i o n a l   . N E T   a p p l i c a t i o n s   c a n   a n d   d o   s u p p o r t   t h e s e   r e q u i r e m e n t s ,   b u t   A S P . N E T   C o r e   a n d   . N E T   C o r e   h a v e   b e e n   o p t i m i z e d   t o   o f f e r   i m p r o v e d   s u p p o r t   f o r   t h e   a b o v e   s c e n a r i o s .   M o r e   a n d   m o r e   o r g a n i z a t i o n s   a r e   c h o o s i n g   t o   h o s t   t h e i r   w e b   a p p l i c a t i o n s   i n   t h e   c l o u d   u s i n g   s e r v i c e s   l i k e   M i c r o s o f t   A z u r e .   Y o u   s h o u l d   c o n s i d e r   h o s t i n g   y o u r   a p p l i c a t i o n   i n   t h e   c l o u d   i f   t h e   f o l l o w i n g   a r e   i m p o r t a n t   t o   y o u r   a p p l i c a t i o n   o r   o r g a n i z a t i o n :     R e d u c e d   i n v e s t m e n t   i n   d a t a   c e n t e r   c o s t s   ( h a r d w a r e ,   s o f t w a r e ,   s p a c e ,   u t i l i t i e s ,   e t c . )     F l e x i b l e   p r i c i n g   ( p a y   b a s e d   o n   u s a g e ,   n o t   f o r   i d l e   c a p a c i t y )     E x t r e m e   r e l i a b i l i t y     I m p r o v e d   a p p   m o b i l i t y ;   e a s i l y   c h a n g e   w h e r e   a n d   h o w   y o u r   a p p   i s   d e p l o y e d     F l e x i b l e   c a p a c i t y ;   s c a l e   u p   o r   d o w n   b a s e d   o n   a c t u a l   n e e d s   B u i l d i n g   w e b   a p p l i c a t i o n s   w i t h   A S P . N E T   C o r e ,   h o s t e d   i n   A z u r e ,   o f f e r s   m a n y   c o m p e t i t i v e   a d v a n t a g e s   o v e r   t r a d i t i o n a l   a l t e r n a t i v e s .   A S P . N E T   C o r e   i s   o p t i m i z e d   f o r   m o d e r n   w e b   a p p l i c a t i o n   d e v e l o p m e n t   p r a c t i c e s   a n d   c l o u d   h o s t i n g   s c e n a r i o s .   I n   t h i s   g u i d e ,   y o u l l   l e a r n   h o w   t o   a r c h i t e c t   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n s   t o   b e s t   t a k e   a d v a n t a g e   o f   t h e s e   c a p a b i l i t i e s .     V e r s i o n   T h i s   e B o o k   h a s   b e e n   r e v i s e d   t o   c o v e r   v e r s i o n   2 . 1   o f   A S P . N E T   C o r e   a n d   . N E T   C o r e .       Evaluation Warning: The document was created with Spire.PDF for .NET
    2     C h a p t e r   1   I n t r o d u c t i o n   P u r p o s e     T h i s   g u i d e   p r o v i d e s   e n d - t o - e n d   g u i d a n c e   o n   b u i l d i n g   m o n o l i t h i c   w e b   a p p l i c a t i o n s   u s i n g   A S P . N E T   C o r e   a n d   A z u r e .       T h i s   g u i d e   i s   c o m p l e m e n t a r y   t o   t h e   . N E T   M i c r o s e r v i c e s :   A r c h i t e c t u r e   f o r   C o n t a i n e r i z e d   . N E T   A p p l i c a t i o n s   e B o o k   w h i c h   f o c u s e s   m o r e   o n   D o c k e r ,   M i c r o s e r v i c e s ,   a n d   D e p l o y m e n t   o f   C o n t a i n e r s   t o   h o s t   e n t e r p r i s e   a p p l i c a t i o n s .   . N E T   M i c r o s e r v i c e s :   A r c h i t e c t u r e   f o r   C o n t a i n e r i z e d   . N E T   A p p l i c a t i o n s   e B o o k   h t t p s : / / a k a . m s / m i c r o s e r v i c e s e b o o k       . N E T   M i c r o s e r v i c e s   S a m p l e   A p p l i c a t i o n   h t t p : / / a k a . m s / m i c r o s e r v i c e s a r c h i t e c t u r e   W h o   s h o u l d   u s e   t h i s   g u i d e   T h e   a u d i e n c e   f o r   t h i s   g u i d e   i s   m a i n l y   d e v e l o p e r s ,   d e v e l o p m e n t   l e a d s ,   a n d   a r c h i t e c t s   w h o   a r e   i n t e r e s t e d   i n   b u i l d i n g   m o d e r n   w e b   a p p l i c a t i o n s   u s i n g   M i c r o s o f t   t e c h n o l o g i e s   a n d   s e r v i c e s   i n   t h e   c l o u d .     A   s e c o n d a r y   a u d i e n c e   i s   t e c h n i c a l   d e c i s i o n   m a k e r s   w h o   a r e   a l r e a d y   f a m i l i a r   A S P . N E T   a n d / o r   A z u r e   a n d   a r e   l o o k i n g   f o r   i n f o r m a t i o n   o n   w h e t h e r   i t   m a k e s   s e n s e   t o   u p g r a d e   t o   A S P . N E T   C o r e   f o r   n e w   o r   e x i s t i n g   p r o j e c t s .     H o w   y o u   c a n   u s e   t h i s   g u i d e   T h i s   g u i d e   h a s   b e e n   c o n d e n s e d   i n t o   a   r e l a t i v e l y   s m a l l   d o c u m e n t   t h a t   f o c u s e s   o n   b u i l d i n g   w e b   a p p l i c a t i o n s   w i t h   m o d e r n   . N E T   t e c h n o l o g i e s   a n d   W i n d o w s   A z u r e .   A s   s u c h ,   i t   c a n   b e   r e a d   i n   i t s   e n t i r e t y   t o   p r o v i d e   a   f o u n d a t i o n   o f   u n d e r s t a n d i n g   s u c h   a p p l i c a t i o n s   a n d   t h e i r   t e c h n i c a l   c o n s i d e r a t i o n s .   T h e   g u i d e ,   a l o n g   w i t h   i t s   s a m p l e   a p p l i c a t i o n ,   c a n   a l s o   s e r v e   a s   a   s t a r t i n g   p o i n t   o r   r e f e r e n c e .   U s e   t h e   a s s o c i a t e d   s a m p l e   a p p l i c a t i o n   a s   a   t e m p l a t e   f o r   y o u r   o w n   a p p l i c a t i o n s ,   o r   t o   s e e   h o w   y o u   m i g h t   o r g a n i z e   y o u r   a p p l i c a t i o n s   c o m p o n e n t   p a r t s .   R e f e r   b a c k   t o   t h e   g u i d e s   p r i n c i p l e s   a n d   c o v e r a g e   o f   a r c h i t e c t u r e   a n d   t e c h n o l o g y   o p t i o n s   a n d   d e c i s i o n   c o n s i d e r a t i o n s   w h e n   y o u r e   w e i g h i n g   t h e s e   c h o i c e s   f o r   y o u r   o w n   a p p l i c a t i o n .   F e e l   f r e e   t o   f o r w a r d   t h i s   g u i d e   t o   y o u r   t e a m   t o   h e l p   e n s u r e   a   c o m m o n   u n d e r s t a n d i n g   o f   t h e s e   c o n s i d e r a t i o n s   a n d   o p p o r t u n i t i e s .   H a v i n g   e v e r y b o d y   w o r k i n g   f r o m   a   c o m m o n   s e t   o f   t e r m i n o l o g y   a n d   u n d e r l y i n g   p r i n c i p l e s   h e l p s   e n s u r e   c o n s i s t e n t   a p p l i c a t i o n   o f   a r c h i t e c t u r a l   p a t t e r n s   a n d   p r a c t i c e s .   R e f e r e n c e s   C h o o s i n g   b e t w e e n   . N E T   C o r e   a n d   . N E T   F r a m e w o r k   f o r   s e r v e r   a p p s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / d o t n e t / a r t i c l e s / s t a n d a r d / c h o o s i n g - c o r e - f r a m e w o r k - s e r v e r         Evaluation Warning: The document was created with Spire.PDF for .NET
      3     C h a p t e r   2   C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s     C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s     w i t h   p r o p e r   d e s i g n ,   t h e   f e a t u r e s   c o m e   c h e a p l y .   T h i s   a p p r o a c h   i s   a r d u o u s ,   b u t   c o n t i n u e s   t o   s u c c e e d .   D e n n i s   R i t c h i e   S u m m a r y   M o d e r n   w e b   a p p l i c a t i o n s   h a v e   h i g h e r   u s e r   e x p e c t a t i o n s   a n d   g r e a t e r   d e m a n d s   t h a n   e v e r   b e f o r e .   T o d a y s   w e b   a p p s   a r e   e x p e c t e d   t o   b e   a v a i l a b l e   2 4 / 7   f r o m   a n y w h e r e   i n   t h e   w o r l d ,   a n d   u s a b l e   f r o m   v i r t u a l l y   a n y   d e v i c e   o r   s c r e e n   s i z e .   W e b   a p p l i c a t i o n s   m u s t   b e   s e c u r e ,   f l e x i b l e ,   a n d   s c a l a b l e   t o   m e e t   s p i k e s   i n   d e m a n d .   I n c r e a s i n g l y ,   c o m p l e x   s c e n a r i o s   s h o u l d   b e   h a n d l e d   b y   r i c h   u s e r   e x p e r i e n c e s   b u i l t   o n   t h e   c l i e n t   u s i n g   J a v a S c r i p t   a n d   c o m m u n i c a t i n g   e f f i c i e n t l y   t h r o u g h   w e b   A P I s .   A S P . N E T   C o r e   i s   o p t i m i z e d   f o r   m o d e r n   w e b   a p p l i c a t i o n s   a n d   c l o u d - b a s e d   h o s t i n g   s c e n a r i o s .   I t s   m o d u l a r   d e s i g n   e n a b l e s   a p p l i c a t i o n s   t o   d e p e n d   o n   o n l y   t h o s e   f e a t u r e s   t h e y   a c t u a l l y   u s e ,   i m p r o v i n g   a p p l i c a t i o n   s e c u r i t y   a n d   p e r f o r m a n c e   w h i l e   r e d u c i n g   h o s t i n g   r e s o u r c e   r e q u i r e m e n t s .     R e f e r e n c e   A p p l i c a t i o n :   e S h o p O n W e b   T h i s   g u i d a n c e   i n c l u d e s   a   r e f e r e n c e   a p p l i c a t i o n ,   e S h o p O n W e b ,   w h i c h   d e m o n s t r a t e s   s o m e   o f   t h e   p r i n c i p l e s   a n d   r e c o m m e n d a t i o n s .   T h e   a p p l i c a t i o n   i s   a   s i m p l e   o n l i n e   s t o r e   w h i c h   s u p p o r t s   b r o w s i n g   t h r o u g h   a   c a t a l o g   o f   s h i r t s ,   c o f f e e   m u g s ,   a n d   o t h e r   m a r k e t i n g   i t e m s .   T h e   r e f e r e n c e   a p p l i c a t i o n   i s   d e l i b e r a t e l y   s i m p l e   i n   o r d e r   t o   m a k e   i t   e a s y   t o   u n d e r s t a n d .   Evaluation Warning: The document was created with Spire.PDF for .NET
    4     C h a p t e r   2   C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s     F i g u r e   2 - 1 .   e S h o p O n W e b     R e f e r e n c e   A p p l i c a t i o n   e S h o p O n W e b   h t t p s : / / g i t h u b . c o m / d o t n e t - a r c h i t e c t u r e / e S h o p O n W e b     C l o u d - H o s t e d   a n d   S c a l a b l e   A S P . N E T   C o r e   i s   o p t i m i z e d   f o r   t h e   c l o u d   ( p u b l i c   c l o u d ,   p r i v a t e   c l o u d ,   a n y   c l o u d )   b e c a u s e   i t   i s   l o w - m e m o r y   a n d   h i g h - t h r o u g h p u t .   T h e   s m a l l e r   f o o t p r i n t   o f   A S P . N E T   C o r e   a p p l i c a t i o n s   m e a n s   y o u   c a n   h o s t   m o r e   o f   t h e m   o n   t h e   s a m e   h a r d w a r e ,   a n d   y o u   p a y   f o r   f e w e r   r e s o u r c e s   w h e n   u s i n g   p a y - a s - y o u   g o   c l o u d   h o s t i n g   s e r v i c e s .   T h e   h i g h e r - t h r o u g h p u t   m e a n s   y o u   c a n   s e r v e   m o r e   c u s t o m e r s   f r o m   a n   a p p l i c a t i o n   g i v e n   t h e   s a m e   h a r d w a r e ,   f u r t h e r   r e d u c i n g   t h e   n e e d   t o   i n v e s t   i n   s e r v e r s   a n d   h o s t i n g   i n f r a s t r u c t u r e .   C r o s s   P l a t f o r m   A S P . N E T   C o r e   i s   c r o s s - p l a t f o r m   a n d   c a n   r u n   o n   L i n u x   a n d   M a c O S   a s   w e l l   a s   W i n d o w s .   T h i s   o p e n s   u p   m a n y   n e w   o p t i o n s   f o r   b o t h   d e v e l o p m e n t   a n d   d e p l o y m e n t   o f   a p p s   b u i l t   w i t h   A S P . N E T   C o r e .   D o c k e r   Evaluation Warning: The document was created with Spire.PDF for .NET
    5     C h a p t e r   2   C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s   c o n t a i n e r s ,   w h i c h   t y p i c a l l y   r u n   L i n u x   t o d a y ,   c a n   h o s t   A S P . N E T   C o r e   a p p l i c a t i o n s ,   a l l o w i n g   t h e m   t o   t a k e   a d v a n t a g e   o f   t h e   b e n e f i t s   o f   c o n t a i n e r s   a n d   m i c r o s e r v i c e s   ( l i n k   t o   m i c r o s e r v i c e s   a n d   c o n t a i n e r s   e B o o k ) .     M o d u l a r   a n d   L o o s e l y   C o u p l e d   N u G e t   p a c k a g e s   a r e   f i r s t - c l a s s   c i t i z e n s   i n   . N E T   C o r e ,   a n d   A S P . N E T   C o r e   a p p s   a r e   c o m p o s e d   o f   m a n y   l i b r a r i e s   t h r o u g h   N u G e t .   T h i s   g r a n u l a r i t y   o f   f u n c t i o n a l i t y   h e l p s   e n s u r e   a p p s   o n l y   d e p e n d   o n   a n d   d e p l o y   f u n c t i o n a l i t y   t h e y   a c t u a l l y   r e q u i r e ,   r e d u c i n g   t h e i r   f o o t p r i n t   a n d   s e c u r i t y   v u l n e r a b i l i t y   s u r f a c e   a r e a .     A S P . N E T   C o r e   a l s o   f u l l y   s u p p o r t s   d e p e n d e n c y   i n j e c t i o n ,   b o t h   i n t e r n a l l y   a n d   a t   t h e   a p p l i c a t i o n   l e v e l .   I n t e r f a c e s   c a n   h a v e   m u l t i p l e   i m p l e m e n t a t i o n s   t h a t   c a n   b e   s w a p p e d   o u t   a s   n e e d e d .   D e p e n d e n c y   i n j e c t i o n   a l l o w s   a p p s   t o   l o o s e l y   c o u p l e   t o   t h o s e   i n t e r f a c e s ,   m a k i n g   t h e m   e a s i e r   t o   e x t e n d ,   m a i n t a i n ,   a n d   t e s t .   E a s i l y   T e s t e d   w i t h   A u t o m a t e d   T e s t s   A S P . N E T   C o r e   a p p l i c a t i o n s   s u p p o r t   u n i t   t e s t i n g ,   a n d   t h e i r   l o o s e   c o u p l i n g   a n d   s u p p o r t   f o r   d e p e n d e n c y   i n j e c t i o n s   m a k e s   i t   e a s y   t o   s w a p   i n f r a s t r u c t u r e   c o n c e r n s   w i t h   f a k e   i m p l e m e n t a t i o n s   f o r   t e s t   p u r p o s e s .   A S P . N E T   C o r e   a l s o   s h i p s   a   T e s t S e r v e r   t h a t   c a n   b e   u s e d   t o   h o s t   a p p s   i n   m e m o r y .   F u n c t i o n a l   t e s t s   c a n   t h e n   m a k e   r e q u e s t s   t o   t h i s   i n - m e m o r y   s e r v e r ,   e x e r c i s i n g   t h e   f u l l   a p p l i c a t i o n   s t a c k   ( i n c l u d i n g   m i d d l e w a r e ,   r o u t i n g ,   m o d e l   b i n d i n g ,   f i l t e r s ,   e t c . )   a n d   r e c e i v i n g   a   r e s p o n s e ,   a l l   i n   a   f r a c t i o n   o f   t h e   t i m e   i t   w o u l d   t a k e   t o   h o s t   t h e   a p p   o n   a   r e a l   s e r v e r   a n d   m a k e   r e q u e s t s   t h r o u g h   t h e   n e t w o r k   l a y e r .   T h e s e   t e s t s   a r e   e s p e c i a l l y   e a s y   t o   w r i t e ,   a n d   v a l u a b l e ,   f o r   A P I s ,   w h i c h   a r e   i n c r e a s i n g l y   i m p o r t a n t   i n   m o d e r n   w e b   a p p l i c a t i o n s .   T r a d i t i o n a l   a n d   S P A   B e h a v i o r s   S u p p o r t e d   T r a d i t i o n a l   w e b   a p p l i c a t i o n s   h a v e   i n v o l v e d   l i t t l e   c l i e n t - s i d e   b e h a v i o r ,   b u t   i n s t e a d   h a v e   r e l i e d   o n   t h e   s e r v e r   f o r   a l l   n a v i g a t i o n ,   q u e r i e s ,   a n d   u p d a t e s   t h e   a p p   m i g h t   n e e d   t o   m a k e .   E a c h   n e w   o p e r a t i o n   m a d e   b y   t h e   u s e r   w o u l d   b e   t r a n s l a t e d   i n t o   a   n e w   w e b   r e q u e s t ,   w i t h   t h e   r e s u l t   b e i n g   a   f u l l   p a g e   r e l o a d   i n   t h e   e n d   u s e r s   b r o w s e r .   C l a s s i c   M o d e l - V i e w - C o n t r o l l e r   ( M V C )   f r a m e w o r k s   t y p i c a l l y   f o l l o w   t h i s   a p p r o a c h ,   w i t h   e a c h   n e w   r e q u e s t   c o r r e s p o n d i n g   t o   a   d i f f e r e n t   c o n t r o l l e r   a c t i o n ,   w h i c h   i n   t u r n   w o u l d   w o r k   w i t h   a   m o d e l   a n d   r e t u r n   a   v i e w .   S o m e   i n d i v i d u a l   o p e r a t i o n s   o n   a   g i v e n   p a g e   m i g h t   b e   e n h a n c e d   w i t h   A J A X   ( A s y n c h r o n o u s   J a v a S c r i p t   a n d   X M L )   f u n c t i o n a l i t y ,   b u t   t h e   o v e r a l l   a r c h i t e c t u r e   o f   t h e   a p p   u s e d   m a n y   d i f f e r e n t   M V C   v i e w s   a n d   U R L   e n d p o i n t s .   S i n g l e   P a g e   A p p l i c a t i o n s   ( S P A s ) ,   b y   c o n t r a s t ,   i n v o l v e   v e r y   f e w   d y n a m i c a l l y   g e n e r a t e d   s e r v e r - s i d e   p a g e   l o a d s   ( i f   a n y ) .   M a n y   S P A s   a r e   i n i t i a l i z e d   w i t h i n   a   s t a t i c   H T M L   f i l e   w h i c h   l o a d s   t h e   n e c e s s a r y   J a v a S c r i p t   l i b r a r i e s   t o   s t a r t   a n d   r u n   t h e   a p p .   T h e s e   a p p s   m a k e   h e a v y   u s a g e   o f   w e b   A P I s   f o r   t h e i r   d a t a   n e e d s   a n d   c a n   p r o v i d e   m u c h   r i c h e r   u s e r   e x p e r i e n c e s .     M a n y   w e b   a p p l i c a t i o n s   i n v o l v e   a   c o m b i n a t i o n   o f   t r a d i t i o n a l   w e b   a p p l i c a t i o n   b e h a v i o r   ( t y p i c a l l y   f o r   c o n t e n t )   a n d   S P A s   ( f o r   i n t e r a c t i v i t y ) .   A S P . N E T   C o r e   s u p p o r t s   b o t h   M V C   a n d   W e b   A P I s   i n   t h e   s a m e   a p p l i c a t i o n ,   u s i n g   t h e   s a m e   s e t   o f   t o o l s   a n d   u n d e r l y i n g   f r a m e w o r k   l i b r a r i e s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    6     C h a p t e r   2   C h a r a c t e r i s t i c s   o f   M o d e r n   W e b   A p p l i c a t i o n s   S i m p l e   D e v e l o p m e n t   a n d   D e p l o y m e n t   A S P . N E T   C o r e   a p p l i c a t i o n s   c a n   b e   w r i t t e n   u s i n g   s i m p l e   t e x t   e d i t o r s   a n d   c o m m a n d   l i n e   i n t e r f a c e s ,   o r   f u l l - f e a t u r e d   d e v e l o p m e n t   e n v i r o n m e n t s   l i k e   V i s u a l   S t u d i o .   M o n o l i t h i c   a p p l i c a t i o n s   a r e   t y p i c a l l y   d e p l o y e d   t o   a   s i n g l e   e n d p o i n t .   D e p l o y m e n t s   c a n   e a s i l y   b e   a u t o m a t e d   t o   o c c u r   a s   p a r t   o f   a   c o n t i n u o u s   i n t e g r a t i o n   ( C I )   a n d   c o n t i n u o u s   d e l i v e r y   ( C D )   p i p e l i n e .   I n   a d d i t i o n   t o   t r a d i t i o n a l   C I / C D   t o o l s ,   W i n d o w s   A z u r e   h a s   i n t e g r a t e d   s u p p o r t   f o r   G i t   r e p o s i t o r i e s   a n d   c a n   a u t o m a t i c a l l y   d e p l o y   u p d a t e s   a s   t h e y   a r e   m a d e   t o   a   s p e c i f i e d   G i t   b r a n c h   o r   t a g .   T r a d i t i o n a l   A S P . N E T   a n d   W e b   F o r m s   I n   a d d i t i o n   t o   A S P . N E T   C o r e ,   t r a d i t i o n a l   A S P . N E T   4 . x   c o n t i n u e s   t o   b e   a   r o b u s t   a n d   r e l i a b l e   p l a t f o r m   f o r   b u i l d i n g   w e b   a p p l i c a t i o n s .   A S P . N E T   s u p p o r t s   M V C   a n d   W e b   A P I   d e v e l o p m e n t   m o d e l s ,   a s   w e l l   a s   W e b   F o r m s ,   w h i c h   i s   w e l l - s u i t e d   t o   p a g e - b a s e d   a p p l i c a t i o n   d e v e l o p m e n t   a n d   f e a t u r e s   a   r i c h   t h i r d - p a r t y   c o m p o n e n t   e c o s y s t e m .   W i n d o w s   A z u r e   h a s   g r e a t   l o n g s t a n d i n g   s u p p o r t   f o r   A S P . N E T   4 . x   a p p l i c a t i o n s ,   a n d   m a n y   d e v e l o p e r s   a r e   f a m i l i a r   w i t h   t h i s   p l a t f o r m .     R e f e r e n c e s     M o d e r n   W e b   A p p l i c a t i o n s     I n t r o d u c t i o n   t o   A S P . N E T   C o r e   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e /     S i x   K e y   B e n e f i t s   o f   A S P . N E T   C o r e   w h i c h   m a k e   i t   D i f f e r e n t   a n d   B e t t e r   h t t p : / / b l o g . t r i g e n t . c o m / s i x - k e y - b e n e f i t s - o f - a s p - n e t - c o r e - 1 - 0 - w h i c h - m a k e - i t - d i f f e r e n t - b e t t e r /         T e s t i n g   i n   A S P . N E T   C o r e   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / t e s t i n g /       Evaluation Warning: The document was created with Spire.PDF for .NET
  S e c t i o n   3     7     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S i n g l e   P a g e   A p p s   ( S P A s )   A t w o o d s   L a w :   A n y   a p p l i c a t i o n   t h a t   c a n   b e   w r i t t e n   i n   J a v a S c r i p t ,   w i l l   e v e n t u a l l y   b e   w r i t t e n   i n   J a v a S c r i p t .   J e f f   A t w o o d   S u m m a r y   T h e r e   a r e   t w o   g e n e r a l   a p p r o a c h e s   t o   b u i l d i n g   w e b   a p p l i c a t i o n s   t o d a y :   t r a d i t i o n a l   w e b   a p p l i c a t i o n s   t h a t   p e r f o r m   m o s t   o f   t h e   a p p l i c a t i o n   l o g i c   o n   t h e   s e r v e r ,   a n d   s i n g l e   p a g e   a p p l i c a t i o n s   ( S P A s )   t h a t   p e r f o r m   m o s t   o f   t h e   u s e r   i n t e r f a c e   l o g i c   i n   a   w e b   b r o w s e r ,   c o m m u n i c a t i n g   w i t h   t h e   w e b   s e r v e r   p r i m a r i l y   u s i n g   w e b   A P I s .   A   h y b r i d   a p p r o a c h   i s   a l s o   p o s s i b l e ,   t h e   s i m p l e s t   b e i n g   t h e   h o s t   o n e   o r   m o r e   r i c h   S P A - l i k e   s u b - a p p l i c a t i o n s   w i t h i n   a   l a r g e r   t r a d i t i o n a l   w e b   a p p l i c a t i o n .       Evaluation Warning: The document was created with Spire.PDF for .NET
    8     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s   Y o u   s h o u l d   u s e   t r a d i t i o n a l   w e b   a p p l i c a t i o n s   w h e n :     Y o u r   a p p l i c a t i o n s   c l i e n t - s i d e   r e q u i r e m e n t s   a r e   s i m p l e   o r   e v e n   r e a d - o n l y .     Y o u r   a p p l i c a t i o n   n e e d s   t o   f u n c t i o n   i n   b r o w s e r s   w i t h o u t   J a v a S c r i p t   s u p p o r t .     Y o u r   t e a m   i s   u n f a m i l i a r   w i t h   J a v a S c r i p t   o r   T y p e S c r i p t   d e v e l o p m e n t   t e c h n i q u e s .   Y o u   s h o u l d   u s e   a   S P A   w h e n :     Y o u r   a p p l i c a t i o n   m u s t   e x p o s e   a   r i c h   u s e r   i n t e r f a c e   w i t h   m a n y   f e a t u r e s .     Y o u r   t e a m   i s   f a m i l i a r   w i t h   J a v a S c r i p t   a n d / o r   T y p e S c r i p t   d e v e l o p m e n t .     Y o u r   a p p l i c a t i o n   m u s t   a l r e a d y   e x p o s e   a n   A P I   f o r   o t h e r   ( i n t e r n a l   o r   p u b l i c )   c l i e n t s .   A d d i t i o n a l l y ,   S P A   f r a m e w o r k s   r e q u i r e   g r e a t e r   a r c h i t e c t u r a l   a n d   s e c u r i t y   e x p e r t i s e .   T h e y   e x p e r i e n c e   g r e a t e r   c h u r n   d u e   t o   f r e q u e n t   u p d a t e s   a n d   n e w   f r a m e w o r k s   t h a n   t r a d i t i o n a l   w e b   a p p l i c a t i o n s .   C o n f i g u r i n g   a u t o m a t e d   b u i l d   a n d   d e p l o y m e n t   p r o c e s s e s   a n d   u t i l i z i n g   d e p l o y m e n t   o p t i o n s   l i k e   c o n t a i n e r s   a r e   m o r e   d i f f i c u l t   w i t h   S P A   a p p l i c a t i o n s   t h a n   t r a d i t i o n a l   w e b   a p p s .   I m p r o v e m e n t s   i n   u s e r   e x p e r i e n c e   m a d e   p o s s i b l e   b y   t h e   S P A   m o d e l   m u s t   b e   w e i g h e d   a g a i n s t   t h e s e   c o n s i d e r a t i o n s .   P r o j e c t   T e m p l a t e s   A S P . N E T   C o r e   ( 2 . 0 + )   s h i p s   s e v e r a l   w e b   a p p l i c a t i o n   t e m p l a t e s   t h a t   a r e   a v a i l a b l e   f r o m   V i s u a l   S t u d i o   o r   t h e   d o t n e t   C L I   w h i c h   c a n   b e   u s e d   t o   g e t   s t a r t e d   b u i l d i n g   t r a d i t i o n a l   o r   S P A - s t y l e   a p p l i c a t i o n s .   T h e s e   a r e   j u s t   a   f e w   o f   t h e   t e m p l a t e s   t h a t   a r e   s h i p p e d   a n d   t h e s e   a r e   j u s t   s t a r t i n g   p o i n t s .   Y o u   m a y   f i n d   u s e f u l   3 r d   p a r t y   a n d   o p e n   s o u r c e   t e m p l a t e s   o r   c r e a t e   y o u r   o w n :     A S P . N E T   C o r e   W e b   A p p   ( R a z o r   P a g e s )     A S P . N E T   C o r e   W e b   A p p   ( M o d e l - V i e w - C o n t r o l l e r )     A S P . N E T   C o r e   W e b   A P I   ( n o   U I )     A S P . N E T   C o r e   w i t h   A n g u l a r   ( S P A )     A S P . N E T   C o r e   w i t h   R e a c t . j s   ( S P A )     A S P . N E T   C o r e   w i t h   R e a c t . j s   a n d   R e d u x   ( S P A )   T h e   r e c o m m e n d e d   a p p r o a c h   f o r   m a n y   t r a d i t i o n a l   a p p l i c a t i o n s   i s   R a z o r   P a g e s ,   w h i c h   o f f e r   t h e   s a m e   a r c h i t e c t u r a l   a d v a n t a g e s   o f   A S P . N E T   C o r e   M V C ,   b u t   w i t h   f e w e r   f i l e s   a n d   f o l d e r s .   Y o u   c a n   a l s o   c h o o s e   t h e   M V C   t e m p l a t e ,   w h i c h   w i l l   b e   v e r y   f a m i l i a r   t o   d e v e l o p e r s   w i t h   e x p e r i e n c e   u s i n g   A S P . N E T   M V C   o r   A S P . N E T   C o r e   M V C   1 . x .   I f   y o u   d o n t   r e q u i r e   a n y   s e r v e r - s i d e   r e n d e r i n g   o f   p a g e s   o r   v i e w s ,   y o u   c a n   u s e   t h e   W e b   A P I   t e m p l a t e ,   a n d   c r e a t e   y o u r   a p p l i c a t i o n   u s i n g   s t a t i c   f i l e s   t h a t   u s e   J a v a S c r i p t   t o   c a l l   y o u r   A P I   m e t h o d s .   T h e   e S h o p O n W e b   s a m p l e   a p p l i c a t i o n   i n c l u d e s   t w o   w e b   p r o j e c t s ,   d e m o n s t r a t i n g   b o t h   M V C   a n d   R a z o r   P a g e s   a p p r o a c h e s   t o   o r g a n i z i n g   t h e   U I   p r o j e c t .   I t s   i m p o r t a n t   t o   p o i n t   o u t   t h a t   R a z o r   P a g e s   i s   a   p a g e - b a s e d   m o d e l   t h a t   b u i l d s   o n   t o p   o f   t h e   M V C   M o d e l .   Y o u   c a n   a d d   m o r e   P a g e s   O R   m o r e   C o n t r o l l e r s   f o r   e i t h e r   H T M L   o r   W e b   A P I s   a n d   m i x   a n d   m a t c h   a s   y o u   l i k e .   Y o u l l   f i n d   b u i l t - i n   t e m p l a t e s   f o r   A n g u l a r   a s   w e l l   a s   R e a c t   a n d   R e d u x   t o   h e l p   y o u   g e t   s t a r t e d   b u i l d i n g   a   S P A .   T h e s e   t e m p l a t e s   s e t   u p   t h e   n e c e s s a r y   f i l e s   a n d   c l i e n t - s i d e   b u i l d   t o o l s   t o   a l l o w   y o u   t o   g e t   s t a r t e d   q u i c k l y .     T h e s e   t e m p l a t e s   u s e   n p m   ( n o d e   p a c k a g e   m a n a g e r )   t o   i n s t a l l   t h e i r   c l i e n t - s i d e   d e p e n d e n c i e s .     Evaluation Warning: The document was created with Spire.PDF for .NET
    9     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s     F i g u r e   3 - 1 .   I n s t a l l i n g   t h e   A n g u l a r   p r o j e c t   t e m p l a t e   f r o m   d o t n e t   C L I .     M a k e   s u r e   y o u   h a v e   t h e   l a t e s t   v e r s i o n   o f   n o d e j s   i n s t a l l e d ,   t h e n   b u i l d   a n d   r u n   t h e   a p p   ( d o t n e t   r u n   f r o m   t h e   c o m m a n d   p r o m p t ) .     F i g u r e   3 - 2 .   R u n n i n g   t h e   A n g u l a r   p r o j e c t   t e m p l a t e   f r o m   d o t n e t   C L I .     T h e   a n g u l a r   t e m p l a t e   p r o v i d e s   a   s i m p l e   S P A   t h a t   i n c l u d e s   n a v i g a t i o n   a n d   r o u t i n g   a n d   e x a m p l e s   o f   i m p l e m e n t i n g   c l i e n t - s i d e   a n d   s e r v e r - s i d e   b e h a v i o r .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s     F i g u r e   3 - 3 .   T h e   A n g u l a r   S P A   i n   t h e   b r o w s e r .     W h e n   t o   c h o o s e   t r a d i t i o n a l   w e b   a p p s   T h e   f o l l o w i n g   i s   a   m o r e   d e t a i l e d   e x p l a n a t i o n   o f   t h e   p r e v i o u s l y - s t a t e d   r e a s o n s   f o r   p i c k i n g   t r a d i t i o n a l   w e b   a p p l i c a t i o n s .   Y o u r   a p p l i c a t i o n   h a s   s i m p l e ,   p o s s i b l y   r e a d - o n l y ,   c l i e n t - s i d e   r e q u i r e m e n t s   M a n y   w e b   a p p l i c a t i o n s   a r e   p r i m a r i l y   c o n s u m e d   i n   a   r e a d - o n l y   f a s h i o n   b y   t h e   v a s t   m a j o r i t y   o f   t h e i r   u s e r s .   R e a d - o n l y   ( o r   r e a d - m o s t l y )   a p p l i c a t i o n s   t e n d   t o   b e   m u c h   s i m p l e r   t h a n   t h o s e   t h a t   m a i n t a i n   a n d   m a n i p u l a t e   a   g r e a t   d e a l   o f   s t a t e .   F o r   e x a m p l e ,   a   s e a r c h   e n g i n e   m i g h t   c o n s i s t   o f   a   s i n g l e   e n t r y   p o i n t   w i t h   a   t e x t b o x   a n d   a   s e c o n d   p a g e   f o r   d i s p l a y i n g   s e a r c h   r e s u l t s .   A n o n y m o u s   u s e r s   c a n   e a s i l y   m a k e   r e q u e s t s ,   a n d   t h e r e   i s   l i t t l e   n e e d   f o r   c l i e n t - s i d e   l o g i c .   L i k e w i s e ,   a   b l o g   o r   c o n t e n t   m a n a g e m e n t   s y s t e m s   p u b l i c - f a c i n g   a p p l i c a t i o n   u s u a l l y   c o n s i s t s   m a i n l y   o f   c o n t e n t   w i t h   l i t t l e   c l i e n t - s i d e   b e h a v i o r .   S u c h   a p p l i c a t i o n s   a r e   e a s i l y   b u i l t   a s   t r a d i t i o n a l   s e r v e r - b a s e d   w e b   a p p l i c a t i o n s   w h i c h   p e r f o r m   l o g i c   o n   t h e   w e b   s e r v e r   a n d   r e n d e r   H T M L   t o   b e   d i s p l a y e d   i n   t h e   b r o w s e r .   T h e   f a c t   t h a t   e a c h   u n i q u e   p a g e   o f   t h e   s i t e   h a s   i t s   o w n   U R L   t h a t   c a n   b e   b o o k m a r k e d   a n d   i n d e x e d   b y   s e a r c h   e n g i n e s   ( b y   d e f a u l t ,   w i t h o u t   h a v i n g   t o   a d d   t h i s   a s   a   s e p a r a t e   f e a t u r e   o f   t h e   a p p l i c a t i o n )   i s   a l s o   a   c l e a r   b e n e f i t   i n   s u c h   s c e n a r i o s .   Y o u r   a p p l i c a t i o n   n e e d s   t o   f u n c t i o n   i n   b r o w s e r s   w i t h o u t   J a v a S c r i p t   s u p p o r t   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 1     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s   W e b   a p p l i c a t i o n s   t h a t   n e e d   t o   f u n c t i o n   i n   b r o w s e r s   w i t h   l i m i t e d   o r   n o   J a v a S c r i p t   s u p p o r t   s h o u l d   b e   w r i t t e n   u s i n g   t r a d i t i o n a l   w e b   a p p   w o r k f l o w s   ( o r   a t   l e a s t   b e   a b l e   t o   f a l l   b a c k   t o   s u c h   b e h a v i o r ) .   S P A s   r e q u i r e   c l i e n t - s i d e   J a v a S c r i p t   i n   o r d e r   t o   f u n c t i o n ;   i f   i t s   n o t   a v a i l a b l e ,   S P A s   a r e   n o t   a   g o o d   c h o i c e .   Y o u r   t e a m   i s   u n f a m i l i a r   w i t h   J a v a S c r i p t   o r   T y p e S c r i p t   d e v e l o p m e n t   t e c h n i q u e s   I f   y o u r   t e a m   i s   u n f a m i l i a r   w i t h   J a v a S c r i p t   o r   T y p e S c r i p t   b u t   i s   f a m i l i a r   w i t h   s e r v e r - s i d e   w e b   a p p l i c a t i o n   d e v e l o p m e n t ,   t h e n   t h e y   w i l l   p r o b a b l y   b e   a b l e   t o   d e l i v e r   a   t r a d i t i o n a l   w e b   a p p   m o r e   q u i c k l y   t h a n   a   S P A .   U n l e s s   l e a r n i n g   t o   p r o g r a m   S P A s   i s   a   g o a l ,   o r   t h e   u s e r   e x p e r i e n c e   a f f o r d e d   b y   a   S P A   i s   r e q u i r e d ,   t r a d i t i o n a l   w e b   a p p s   a r e   a   m o r e   p r o d u c t i v e   c h o i c e   f o r   t e a m s   w h o   a r e   a l r e a d y   f a m i l i a r   w i t h   b u i l d i n g   t h e m .   W h e n   t o   c h o o s e   S P A s   T h e   f o l l o w i n g   i s   a   m o r e   d e t a i l e d   e x p l a n a t i o n   o f   w h e n   t o   c h o o s e   a   S i n g l e   P a g e   A p p l i c a t i o n s   s t y l e   o f   d e v e l o p m e n t   f o r   y o u r   w e b   a p p .   Y o u r   a p p l i c a t i o n   m u s t   e x p o s e   a   r i c h   u s e r   i n t e r f a c e   w i t h   m a n y   f e a t u r e s   S P A s   c a n   s u p p o r t   r i c h   c l i e n t - s i d e   f u n c t i o n a l i t y   t h a t   d o e s n t   r e q u i r e   r e l o a d i n g   t h e   p a g e   a s   u s e r s   t a k e   a c t i o n s   o r   n a v i g a t e   b e t w e e n   a r e a s   o f   t h e   a p p .   S P A s   c a n   l o a d   m o r e   q u i c k l y ,   f e t c h i n g   d a t a   i n   t h e   b a c k g r o u n d ,   a n d   i n d i v i d u a l   u s e r   a c t i o n s   a r e   m o r e   r e s p o n s i v e   s i n c e   f u l l   p a g e   r e l o a d s   a r e   r a r e .   S P A s   c a n   s u p p o r t   i n c r e m e n t a l   u p d a t e s ,   s a v i n g   p a r t i a l l y   c o m p l e t e d   f o r m s   o r   d o c u m e n t s   w i t h o u t   t h e   u s e r   h a v i n g   t o   c l i c k   a   b u t t o n   t o   s u b m i t   a   f o r m .   S P A s   c a n   s u p p o r t   r i c h   c l i e n t - s i d e   b e h a v i o r s ,   s u c h   a s   d r a g - a n d - d r o p ,   m u c h   m o r e   r e a d i l y   t h a n   t r a d i t i o n a l   a p p l i c a t i o n s .   S P A s   c a n   b e   d e s i g n e d   t o   r u n   i n   a   d i s c o n n e c t e d   m o d e ,   m a k i n g   u p d a t e s   t o   a   c l i e n t - s i d e   m o d e l   t h a t   a r e   e v e n t u a l l y   s y n c h r o n i z e d   b a c k   t o   t h e   s e r v e r   o n c e   a   c o n n e c t i o n   i s   r e - e s t a b l i s h e d .   Y o u   s h o u l d   c h o o s e   a   S P A   s t y l e   a p p l i c a t i o n   i f   y o u r   a p p s   r e q u i r e m e n t s   i n c l u d e   r i c h   f u n c t i o n a l i t y   t h a t   g o e s   b e y o n d   w h a t   t y p i c a l   H T M L   f o r m s   o f f e r .   N o t e   t h a t   f r e q u e n t l y   S P A s   n e e d   t o   i m p l e m e n t   f e a t u r e s   t h a t   a r e   b u i l t - i n   t o   t r a d i t i o n a l   w e b   a p p s ,   s u c h   a s   d i s p l a y i n g   a   m e a n i n g f u l   U R L   i n   t h e   a d d r e s s   b a r   r e f l e c t i n g   t h e   c u r r e n t   o p e r a t i o n   ( a n d   a l l o w i n g   u s e r s   t o   b o o k m a r k   o r   d e e p   l i n k   t o   t h i s   U R L   t o   r e t u r n   t o   i t ) .   S P A s   a l s o   s h o u l d   a l l o w   u s e r s   t o   u s e   t h e   b r o w s e r s   b a c k   a n d   f o r w a r d   b u t t o n s   w i t h   r e s u l t s   t h a t   w o n t   s u r p r i s e   t h e m .   Y o u r   t e a m   i s   f a m i l i a r   w i t h   J a v a S c r i p t   a n d / o r   T y p e S c r i p t   d e v e l o p m e n t   W r i t i n g   S P A s   r e q u i r e s   f a m i l i a r i t y   w i t h   J a v a S c r i p t   a n d / o r   T y p e S c r i p t   a n d   c l i e n t - s i d e   p r o g r a m m i n g   t e c h n i q u e s   a n d   l i b r a r i e s .   Y o u r   t e a m   s h o u l d   b e   c o m p e t e n t   i n   w r i t i n g   m o d e r n   J a v a S c r i p t   u s i n g   a   S P A   f r a m e w o r k   l i k e   A n g u l a r .   R e f e r e n c e s     S P A   F r a m e w o r k s     A n g u l a r   h t t p s : / / a n g u l a r . i o /       C o m p a r i s o n   o f   4   P o p u l a r   J a v a S c r i p t   F r a m e w o r k s   h t t p s : / / w w w . d e v e l o p e r e c o n o m i c s . c o m / f e a t u r e - c o m p a r i s o n - o f - 4 - p o p u l a r - j s - m v - f r a m e w o r k s     Y o u r   a p p l i c a t i o n   m u s t   a l r e a d y   e x p o s e   a n   A P I   f o r   o t h e r   ( i n t e r n a l   o r   p u b l i c )   c l i e n t s   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 2     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s   I f   y o u r e   a l r e a d y   s u p p o r t i n g   a   w e b   A P I   f o r   u s e   b y   o t h e r   c l i e n t s ,   i t   m a y   r e q u i r e   l e s s   e f f o r t   t o   c r e a t e   a   S P A   i m p l e m e n t a t i o n   t h a t   l e v e r a g e s   t h e s e   A P I s   r a t h e r   t h a n   r e p r o d u c i n g   t h e   l o g i c   i n   s e r v e r - s i d e   f o r m .   S P A s   m a k e   e x t e n s i v e   u s e   o f   w e b   A P I s   t o   q u e r y   a n d   u p d a t e   d a t a   a s   u s e r s   i n t e r a c t   w i t h   t h e   a p p l i c a t i o n .       Evaluation Warning: The document was created with Spire.PDF for .NET
    1 3     C h a p t e r   3   C h o o s i n g   B e t w e e n   T r a d i t i o n a l   W e b   A p p s   a n d   S P A s   D e c i s i o n   t a b l e     T r a d i t i o n a l   W e b   o r   S P A   T h e   f o l l o w i n g   d e c i s i o n   t a b l e   s u m m a r i z e s   s o m e   o f   t h e   b a s i c   f a c t o r s   t o   c o n s i d e r   w h e n   c h o o s i n g   b e t w e e n   a   t r a d i t i o n a l   w e b   a p p l i c a t i o n   a n d   a   S P A .   F a c t o r   T r a d i t i o n a l   W e b   A p p   S i n g l e   P a g e   A p p l i c a t i o n   R e q u i r e d   T e a m   F a m i l i a r i t y   w i t h   J a v a S c r i p t / T y p e S c r i p t   M i n i m a l   R e q u i r e d   S u p p o r t   B r o w s e r s   w i t h o u t   S c r i p t i n g   S u p p o r t e d   N o t   S u p p o r t e d   M i n i m a l   C l i e n t - S i d e   A p p l i c a t i o n   B e h a v i o r   W e l l - S u i t e d   O v e r k i l l     R i c h ,   C o m p l e x   U s e r   I n t e r f a c e   R e q u i r e m e n t s   L i m i t e d   W e l l - S u i t e d     Evaluation Warning: The document was created with Spire.PDF for .NET
  C H A P T E R   4     1 4     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s   A r c h i t e c t u r a l   P r i n c i p l e s   I f   b u i l d e r s   b u i l t   b u i l d i n g s   t h e   w a y   p r o g r a m m e r s   w r o t e   p r o g r a m s ,   t h e n   t h e   f i r s t   w o o d p e c k e r   t h a t   c a m e   a l o n g   w o u l d   d e s t r o y   c i v i l i z a t i o n .   G e r a l d   W e i n b e r g   S u m m a r y   Y o u   s h o u l d   a r c h i t e c t   a n d   d e s i g n   s o f t w a r e   s o l u t i o n s   w i t h   m a i n t a i n a b i l i t y   i n   m i n d .   T h e   p r i n c i p l e s   o u t l i n e d   i n   t h i s   s e c t i o n   c a n   h e l p   g u i d e   y o u   t o w a r d   a r c h i t e c t u r a l   d e c i s i o n s   t h a t   w i l l   r e s u l t   i n   c l e a n ,   m a i n t a i n a b l e   a p p l i c a t i o n s .   G e n e r a l l y ,   t h e s e   p r i n c i p l e s   w i l l   g u i d e   y o u   t o w a r d   b u i l d i n g   a p p l i c a t i o n s   o u t   o f   d i s c r e t e   c o m p o n e n t s   t h a t   a r e   n o t   t i g h t l y   c o u p l e d   t o   o t h e r   p a r t s   o f   y o u r   a p p l i c a t i o n ,   b u t   r a t h e r   c o m m u n i c a t e   t h r o u g h   e x p l i c i t   i n t e r f a c e s   o r   m e s s a g i n g   s y s t e m s .   C o m m o n   d e s i g n   p r i n c i p l e s   S e p a r a t i o n   o f   C o n c e r n s   A   g u i d i n g   p r i n c i p l e   w h e n   d e v e l o p i n g   i s   S e p a r a t i o n   o f   C o n c e r n s .   T h i s   p r i n c i p l e   a s s e r t s   t h a t   s o f t w a r e   s h o u l d   b e   s e p a r a t e d   b a s e d   o n   t h e   k i n d s   o f   w o r k   i t   p e r f o r m s .   F o r   i n s t a n c e ,   c o n s i d e r   a n   a p p l i c a t i o n   t h a t   i n c l u d e s   l o g i c   f o r   i d e n t i f y i n g   n o t e w o r t h y   i t e m s   t o   d i s p l a y   t o   t h e   u s e r ,   a n d   w h i c h   f o r m a t s   s u c h   i t e m s   i n   a   p a r t i c u l a r   w a y   t o   m a k e   t h e m   m o r e   n o t i c e a b l e .   T h e   b e h a v i o r   r e s p o n s i b l e   f o r   c h o o s i n g   w h i c h   i t e m s   t o   f o r m a t   s h o u l d   b e   k e p t   s e p a r a t e   f r o m   t h e   b e h a v i o r   r e s p o n s i b l e   f o r   f o r m a t t i n g   t h e   i t e m s ,   s i n c e   t h e s e   a r e   s e p a r a t e   c o n c e r n s   t h a t   a r e   o n l y   c o i n c i d e n t a l l y   r e l a t e d   t o   o n e   a n o t h e r .   A r c h i t e c t u r a l l y ,   a p p l i c a t i o n s   c a n   b e   l o g i c a l l y   b u i l t   t o   f o l l o w   t h i s   p r i n c i p l e   b y   s e p a r a t i n g   c o r e   b u s i n e s s   b e h a v i o r   f r o m   i n f r a s t r u c t u r e   a n d   u s e r   i n t e r f a c e   l o g i c .   I d e a l l y ,   b u s i n e s s   r u l e s   a n d   l o g i c   s h o u l d   r e s i d e   i n   a   s e p a r a t e   p r o j e c t ,   w h i c h   s h o u l d   n o t   d e p e n d   o n   o t h e r   p r o j e c t s   i n   t h e   a p p l i c a t i o n .   T h i s   h e l p s   e n s u r e   t h a t   t h e   b u s i n e s s   m o d e l   i s   e a s y   t o   t e s t   a n d   c a n   e v o l v e   w i t h o u t   b e i n g   t i g h t l y   c o u p l e d   t o   l o w - l e v e l   i m p l e m e n t a t i o n   d e t a i l s .   S e p a r a t i o n   o f   c o n c e r n s   i s   a   k e y   c o n s i d e r a t i o n   b e h i n d   t h e   u s e   o f   l a y e r s   i n   a p p l i c a t i o n   a r c h i t e c t u r e s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 5     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s   E n c a p s u l a t i o n   D i f f e r e n t   p a r t s   o f   a n   a p p l i c a t i o n   s h o u l d   u s e   e n c a p s u l a t i o n   t o   i n s u l a t e   t h e m   f r o m   o t h e r   p a r t s   o f   t h e   a p p l i c a t i o n .   A p p l i c a t i o n   c o m p o n e n t s   a n d   l a y e r s   s h o u l d   b e   a b l e   t o   a d j u s t   t h e i r   i n t e r n a l   i m p l e m e n t a t i o n   w i t h o u t   b r e a k i n g   t h e i r   c o l l a b o r a t o r s   a s   l o n g   a s   e x t e r n a l   c o n t r a c t s   a r e   n o t   v i o l a t e d .   P r o p e r   u s e   o f   e n c a p s u l a t i o n   h e l p s   a c h i e v e   l o o s e   c o u p l i n g   a n d   m o d u l a r i t y   i n   a p p l i c a t i o n   d e s i g n s ,   s i n c e   o b j e c t s   a n d   p a c k a g e s   c a n   b e   r e p l a c e d   w i t h   a l t e r n a t i v e   i m p l e m e n t a t i o n s   s o   l o n g   a s   t h e   s a m e   i n t e r f a c e   i s   m a i n t a i n e d .   I n   c l a s s e s ,   e n c a p s u l a t i o n   i s   a c h i e v e d   b y   l i m i t i n g   o u t s i d e   a c c e s s   t o   t h e   c l a s s s   i n t e r n a l   s t a t e .   I f   a n   o u t s i d e   a c t o r   w a n t s   t o   m a n i p u l a t e   t h e   s t a t e   o f   t h e   o b j e c t ,   i t   s h o u l d   d o   s o   t h r o u g h   a   w e l l - d e f i n e d   f u n c t i o n   ( o r   p r o p e r t y   s e t t e r ) ,   r a t h e r   t h a n   h a v i n g   d i r e c t   a c c e s s   t o   t h e   p r i v a t e   s t a t e   o f   t h e   o b j e c t .   L i k e w i s e ,   a p p l i c a t i o n   c o m p o n e n t s   a n d   a p p l i c a t i o n s   t h e m s e l v e s   s h o u l d   e x p o s e   w e l l - d e f i n e d   i n t e r f a c e s   f o r   t h e i r   c o l l a b o r a t o r s   t o   u s e ,   r a t h e r   t h a n   a l l o w i n g   t h e i r   s t a t e   t o   b e   m o d i f i e d   d i r e c t l y .   T h i s   f r e e s   t h e   a p p l i c a t i o n s   i n t e r n a l   d e s i g n   t o   e v o l v e   o v e r   t i m e   w i t h o u t   w o r r y i n g   t h a t   d o i n g   s o   w i l l   b r e a k   c o l l a b o r a t o r s ,   s o   l o n g   a s   t h e   p u b l i c   c o n t r a c t s   a r e   m a i n t a i n e d .   D e p e n d e n c y   I n v e r s i o n   T h e   d i r e c t i o n   o f   d e p e n d e n c y   w i t h i n   t h e   a p p l i c a t i o n   s h o u l d   b e   i n   t h e   d i r e c t i o n   o f   a b s t r a c t i o n ,   n o t   i m p l e m e n t a t i o n   d e t a i l s .   M o s t   a p p l i c a t i o n s   a r e   w r i t t e n   s u c h   t h a t   c o m p i l e - t i m e   d e p e n d e n c y   f l o w s   i n   t h e   d i r e c t i o n   o f   r u n t i m e   e x e c u t i o n .   T h i s   p r o d u c e s   a   d i r e c t   d e p e n d e n c y   g r a p h .   T h a t   i s ,   i f   m o d u l e   A   c a l l s   a   f u n c t i o n   i n   m o d u l e   B ,   w h i c h   c a l l s   a   f u n c t i o n   i n   m o d u l e   C ,   t h e n   a t   c o m p i l e   t i m e   A   w i l l   d e p e n d   o n   B   w h i c h   w i l l   d e p e n d   o n   C ,   a s   s h o w n   i n   F i g u r e   4 - 1 .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 6     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s     F i g u r e   4 - 1 .   D i r e c t   d e p e n d e n c y   g r a p h .   C o n t r o l   f l o w   m i r r o r s   r e f e r e n c e s .     A p p l y i n g   t h e   d e p e n d e n c y   i n v e r s i o n   p r i n c i p l e   a l l o w s   A   t o   c a l l   m e t h o d s   o n   a n   a b s t r a c t i o n   t h a t   B   i m p l e m e n t s ,   m a k i n g   i t   p o s s i b l e   f o r   A   t o   c a l l   B   a t   r u n   t i m e ,   b u t   f o r   B   t o   d e p e n d   o n   a n   i n t e r f a c e   c o n t r o l l e d   b y   A   a t   c o m p i l e   t i m e   ( t h u s ,   i n v e r t i n g   t h e   t y p i c a l   c o m p i l e - t i m e   d e p e n d e n c y ) .   A t   r u n t i m e ,   t h e   f l o w   o f   p r o g r a m   e x e c u t i o n   r e m a i n s   u n c h a n g e d ,   b u t   t h e   i n t r o d u c t i o n   o f   i n t e r f a c e s   m e a n s   t h a t   d i f f e r e n t   i m p l e m e n t a t i o n s   o f   t h e s e   i n t e r f a c e s   c a n   e a s i l y   b e   p l u g g e d   i n .   F i g u r e   4 - 2   d e m o n s t r a t e s   t h i s   d e s i g n .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 7     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s     F i g u r e   4 - 2 .   I n v e r t e d   d e p e n d e n c y   g r a p h .     D e p e n d e n c y   i n v e r s i o n   i s   a   k e y   p a r t   o f   b u i l d i n g   l o o s e l y - c o u p l e d   a p p l i c a t i o n s ,   s i n c e   i m p l e m e n t a t i o n   d e t a i l s   c a n   b e   w r i t t e n   t o   d e p e n d   o n   a n d   i m p l e m e n t   h i g h e r   l e v e l   a b s t r a c t i o n s ,   r a t h e r   t h a n   t h e   o t h e r   w a y   a r o u n d .   T h e   r e s u l t i n g   a p p l i c a t i o n s   a r e   m o r e   t e s t a b l e ,   m o d u l a r ,   a n d   m a i n t a i n a b l e   a s   a   r e s u l t .   T h e   p r a c t i c e   o f   d e p e n d e n c y   i n j e c t i o n   i s   m a d e   p o s s i b l e   b y   f o l l o w i n g   t h e   d e p e n d e n c y   i n v e r s i o n   p r i n c i p l e .   E x p l i c i t   D e p e n d e n c i e s   M e t h o d s   a n d   c l a s s e s   s h o u l d   e x p l i c i t l y   r e q u i r e   a n y   c o l l a b o r a t i n g   o b j e c t s   t h e y   n e e d   i n   o r d e r   t o   f u n c t i o n   c o r r e c t l y .   C l a s s   c o n s t r u c t o r s   p r o v i d e   a n   o p p o r t u n i t y   f o r   c l a s s e s   t o   i d e n t i f y   t h e   t h i n g s   t h e y   n e e d   i n   o r d e r   t o   b e   i n   a   v a l i d   s t a t e   a n d   t o   f u n c t i o n   p r o p e r l y .   I f   y o u   d e f i n e   c l a s s e s   t h a t   c a n   b e   c o n s t r u c t e d   a n d   c a l l e d ,   b u t   w h i c h   w i l l   o n l y   f u n c t i o n   p r o p e r l y   i f   c e r t a i n   g l o b a l   o r   i n f r a s t r u c t u r e   c o m p o n e n t s   a r e   i n   p l a c e ,   t h e s e   c l a s s e s   a r e   b e i n g   d i s h o n e s t   w i t h   t h e i r   c l i e n t s .   T h e   c o n s t r u c t o r   c o n t r a c t   i s   t e l l i n g   t h e   c l i e n t   t h a t   i t   o n l y   n e e d s   t h e   t h i n g s   s p e c i f i e d   ( p o s s i b l y   n o t h i n g   i f   t h e   c l a s s   i s   j u s t   u s i n g   a   d e f a u l t   c o n s t r u c t o r ) ,   b u t   t h e n   a t   r u n t i m e   i t   t u r n s   o u t   t h e   o b j e c t   r e a l l y   d i d   n e e d   s o m e t h i n g   e l s e .   B y   f o l l o w i n g   t h e   e x p l i c i t   d e p e n d e n c i e s   p r i n c i p l e ,   y o u r   c l a s s e s   a n d   m e t h o d s   a r e   b e i n g   h o n e s t   w i t h   t h e i r   c l i e n t s   a b o u t   w h a t   t h e y   n e e d   i n   o r d e r   t o   f u n c t i o n .   T h i s   m a k e s   y o u r   c o d e   m o r e   s e l f - d o c u m e n t i n g   a n d   y o u r   c o d i n g   c o n t r a c t s   m o r e   u s e r - f r i e n d l y ,   s i n c e   u s e r s   w i l l   c o m e   t o   t r u s t   t h a t   a s   l o n g   a s   t h e y   p r o v i d e   w h a t s   r e q u i r e d   i n   t h e   f o r m   o f   m e t h o d   o r   c o n s t r u c t o r   p a r a m e t e r s ,   t h e   o b j e c t s   t h e y r e   w o r k i n g   w i t h   w i l l   b e h a v e   c o r r e c t l y   a t   r u n   t i m e .   S i n g l e   R e s p o n s i b i l i t y   T h e   s i n g l e   r e s p o n s i b i l i t y   p r i n c i p l e   a p p l i e s   t o   o b j e c t - o r i e n t e d   d e s i g n   b u t   c a n   a l s o   b e   c o n s i d e r e d   a s   a n   a r c h i t e c t u r a l   p r i n c i p l e   s i m i l a r   t o   s e p a r a t i o n   o f   c o n c e r n s .   I t   s t a t e s   t h a t   o b j e c t s   s h o u l d   h a v e   o n l y   o n e   r e s p o n s i b i l i t y   a n d   t h a t   t h e y   s h o u l d   h a v e   o n l y   o n e   r e a s o n   t o   c h a n g e .   S p e c i f i c a l l y ,   t h e   o n l y   s i t u a t i o n   i n   w h i c h   t h e   o b j e c t   s h o u l d   c h a n g e   i s   i f   t h e   m a n n e r   i n   w h i c h   i t   p e r f o r m s   i t s   o n e   r e s p o n s i b i l i t y   m u s t   b e   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 8     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s   u p d a t e d .   F o l l o w i n g   t h i s   p r i n c i p l e   h e l p s   t o   p r o d u c e   m o r e   l o o s e l y - c o u p l e d   a n d   m o d u l a r   s y s t e m s ,   s i n c e   m a n y   k i n d s   o f   n e w   b e h a v i o r   c a n   b e   i m p l e m e n t e d   a s   n e w   c l a s s e s ,   r a t h e r   t h a n   b y   a d d i n g   a d d i t i o n a l   r e s p o n s i b i l i t y   t o   e x i s t i n g   c l a s s e s .   A d d i n g   n e w   c l a s s e s   i s   a l w a y s   s a f e r   t h a n   c h a n g i n g   e x i s t i n g   c l a s s e s ,   s i n c e   n o   c o d e   y e t   d e p e n d s   o n   t h e   n e w   c l a s s e s .   I n   a   m o n o l i t h i c   a p p l i c a t i o n ,   w e   c a n   a p p l y   t h e   s i n g l e   r e s p o n s i b i l i t y   p r i n c i p l e   a t   a   h i g h   l e v e l   t o   t h e   l a y e r s   i n   t h e   a p p l i c a t i o n .   P r e s e n t a t i o n   r e s p o n s i b i l i t y   s h o u l d   r e m a i n   i n   t h e   U I   p r o j e c t ,   w h i l e   d a t a   a c c e s s   r e s p o n s i b i l i t y   s h o u l d   b e   k e p t   w i t h i n   a n   i n f r a s t r u c t u r e   p r o j e c t .   B u s i n e s s   l o g i c   s h o u l d   b e   k e p t   i n   t h e   a p p l i c a t i o n   c o r e   p r o j e c t ,   w h e r e   i t   c a n   b e   e a s i l y   t e s t e d   a n d   c a n   e v o l v e   i n d e p e n d e n t l y   f r o m   o t h e r   r e s p o n s i b i l i t i e s .   W h e n   t h i s   p r i n c i p l e   i s   a p p l i e d   t o   a p p l i c a t i o n   a r c h i t e c t u r e ,   a n d   t a k e n   t o   i t s   l o g i c a l   e n d p o i n t ,   y o u   g e t   m i c r o s e r v i c e s .   A   g i v e n   m i c r o s e r v i c e   s h o u l d   h a v e   a   s i n g l e   r e s p o n s i b i l i t y .   I f   y o u   n e e d   t o   e x t e n d   t h e   b e h a v i o r   o f   a   s y s t e m ,   i t s   u s u a l l y   b e t t e r   t o   d o   i t   b y   a d d i n g   a d d i t i o n a l   m i c r o s e r v i c e s ,   r a t h e r   t h a n   b y   a d d i n g   r e s p o n s i b i l i t y   t o   a n   e x i s t i n g   o n e .   L e a r n   m o r e   a b o u t   m i c r o s e r v i c e s   a r c h i t e c t u r e   D o n t   R e p e a t   Y o u r s e l f   ( D R Y )   T h e   a p p l i c a t i o n   s h o u l d   a v o i d   s p e c i f y i n g   b e h a v i o r   r e l a t e d   t o   a   p a r t i c u l a r   c o n c e p t   i n   m u l t i p l e   p l a c e s   a s   t h i s   i s   a   f r e q u e n t   s o u r c e   o f   e r r o r s .   A t   s o m e   p o i n t ,   a   c h a n g e   i n   r e q u i r e m e n t s   w i l l   r e q u i r e   c h a n g i n g   t h i s   b e h a v i o r   a n d   t h e   l i k e l i h o o d   t h a t   a t   l e a s t   o n e   i n s t a n c e   o f   t h e   b e h a v i o r   w i l l   f a i l   t o   b e   u p d a t e d   w i l l   r e s u l t   i n   i n c o n s i s t e n t   b e h a v i o r   o f   t h e   s y s t e m .   R a t h e r   t h a n   d u p l i c a t i n g   l o g i c ,   e n c a p s u l a t e   i t   i n   a   p r o g r a m m i n g   c o n s t r u c t .   M a k e   t h i s   c o n s t r u c t   t h e   s i n g l e   a u t h o r i t y   o v e r   t h i s   b e h a v i o r   a n d   h a v e   a n y   o t h e r   p a r t   o f   t h e   a p p l i c a t i o n   t h a t   r e q u i r e s   t h i s   b e h a v i o r   u s e   t h e   n e w   c o n s t r u c t .   N o t e :   A v o i d   b i n d i n g   t o g e t h e r   b e h a v i o r   t h a t   i s   o n l y   c o i n c i d e n t a l l y   r e p e t i t i v e .   F o r   e x a m p l e ,   j u s t   b e c a u s e   t w o   d i f f e r e n t   c o n s t a n t s   b o t h   h a v e   t h e   s a m e   v a l u e ,   t h a t   d o e s n t   m e a n   y o u   s h o u l d   h a v e   o n l y   o n e   c o n s t a n t ,   i f   c o n c e p t u a l l y   t h e y r e   r e f e r r i n g   t o   d i f f e r e n t   t h i n g s .       Evaluation Warning: The document was created with Spire.PDF for .NET
    1 9     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s   P e r s i s t e n c e   I g n o r a n c e   P e r s i s t e n c e   i g n o r a n c e   ( P I )   r e f e r s   t o   t y p e s   t h a t   n e e d   t o   b e   p e r s i s t e d ,   b u t   w h o s e   c o d e   i s   u n a f f e c t e d   b y   t h e   c h o i c e   o f   p e r s i s t e n c e   t e c h n o l o g y .   S u c h   t y p e s   i n   . N E T   a r e   s o m e t i m e s   r e f e r r e d   t o   a s   P l a i n   O l d   C L R   O b j e c t s   ( P O C O s ) ,   b e c a u s e   t h e y   d o   n o t   n e e d   t o   i n h e r i t   f r o m   a   p a r t i c u l a r   b a s e   c l a s s   o r   i m p l e m e n t   a   p a r t i c u l a r   i n t e r f a c e .   P e r s i s t e n c e   i g n o r a n c e   i s   v a l u a b l e   b e c a u s e   i t   a l l o w s   t h e   s a m e   b u s i n e s s   m o d e l   t o   b e   p e r s i s t e d   i n   m u l t i p l e   w a y s ,   o f f e r i n g   a d d i t i o n a l   f l e x i b i l i t y   t o   t h e   a p p l i c a t i o n .   P e r s i s t e n c e   c h o i c e s   m i g h t   c h a n g e   o v e r   t i m e ,   f r o m   o n e   d a t a b a s e   t e c h n o l o g y   t o   a n o t h e r ,   o r   a d d i t i o n a l   f o r m s   o f   p e r s i s t e n c e   m i g h t   b e   r e q u i r e d   i n   a d d i t i o n   t o   w h a t e v e r   t h e   a p p l i c a t i o n   s t a r t e d   w i t h   ( f o r   e x a m p l e ,   u s i n g   a   R e d i s   c a c h e   o r   A z u r e   C o s m o s   D B   i n   a d d i t i o n   t o   a   r e l a t i o n a l   d a t a b a s e ) .   S o m e   e x a m p l e s   o f   v i o l a t i o n s   o f   t h i s   p r i n c i p l e   i n c l u d e :     A   r e q u i r e d   b a s e   c l a s s     A   r e q u i r e d   i n t e r f a c e   i m p l e m e n t a t i o n     C l a s s e s   r e s p o n s i b l e   f o r   s a v i n g   t h e m s e l v e s   ( s u c h   a s   t h e   A c t i v e   R e c o r d   p a t t e r n )     R e q u i r e d   d e f a u l t   c o n s t r u c t o r     P r o p e r t i e s   r e q u i r i n g   v i r t u a l   k e y w o r d     P r o p e r t i e s   f o r c e d   t o   u s e   c e r t a i n   t y p e s   ( f o r   e x a m p l e ,   c o l l e c t i o n   p r o p e r t i e s   m u s t   e x p o s e   I C o l l e c t i o n ,   n o t   j u s t   I E n u m e r a b l e )     P e r s i s t e n c e - s p e c i f i c   r e q u i r e d   a t t r i b u t e s   T h e   r e q u i r e m e n t   t h a t   c l a s s e s   h a v e   a n y   o f   t h e   a b o v e   f e a t u r e s   o r   b e h a v i o r s   a d d s   c o u p l i n g   b e t w e e n   t h e   t y p e s   t o   b e   p e r s i s t e d   a n d   t h e   c h o i c e   o f   p e r s i s t e n c e   t e c h n o l o g y ,   m a k i n g   i t   m o r e   d i f f i c u l t   t o   a d o p t   n e w   d a t a   a c c e s s   s t r a t e g i e s   i n   t h e   f u t u r e .       Evaluation Warning: The document was created with Spire.PDF for .NET
    2 0     C h a p t e r   4   A r c h i t e c t u r a l   P r i n c i p l e s   B o u n d e d   C o n t e x t s   B o u n d e d   c o n t e x t s   a r e   a   c e n t r a l   p a t t e r n   i n   D o m a i n - D r i v e n   D e s i g n .   T h e y   p r o v i d e   a   w a y   o f   t a c k l i n g   c o m p l e x i t y   i n   l a r g e   a p p l i c a t i o n s   o r   o r g a n i z a t i o n s   b y   b r e a k i n g   i t   u p   i n t o   s e p a r a t e   c o n c e p t u a l   m o d u l e s .   E a c h   c o n c e p t u a l   m o d u l e   t h e n   r e p r e s e n t s   a   c o n t e x t   w h i c h   i s   s e p a r a t e d   f r o m   o t h e r   c o n t e x t s   ( h e n c e ,   b o u n d e d ) ,   a n d   c a n   e v o l v e   i n d e p e n d e n t l y .   E a c h   b o u n d e d   c o n t e x t   s h o u l d   i d e a l l y   b e   f r e e   t o   c h o o s e   i t s   o w n   n a m e s   f o r   c o n c e p t s   w i t h i n   i t   a n d   s h o u l d   h a v e   e x c l u s i v e   a c c e s s   t o   i t s   o w n   p e r s i s t e n c e   s t o r e .   A t   a   m i n i m u m ,   i n d i v i d u a l   w e b   a p p l i c a t i o n s   s h o u l d   s t r i v e   t o   b e   t h e i r   o w n   b o u n d e d   c o n t e x t ,   w i t h   t h e i r   o w n   p e r s i s t e n c e   s t o r e   f o r   t h e i r   b u s i n e s s   m o d e l ,   r a t h e r   t h a n   s h a r i n g   a   d a t a b a s e   w i t h   o t h e r   a p p l i c a t i o n s .   C o m m u n i c a t i o n   b e t w e e n   b o u n d e d   c o n t e x t s   o c c u r s   t h r o u g h   p r o g r a m m a t i c   i n t e r f a c e s ,   r a t h e r   t h a n   t h r o u g h   a   s h a r e d   d a t a b a s e ,   w h i c h   a l l o w s   f o r   b u s i n e s s   l o g i c   a n d   e v e n t s   t o   t a k e   p l a c e   i n   r e s p o n s e   t o   c h a n g e s   t h a t   t a k e   p l a c e .   B o u n d e d   c o n t e x t s   m a p   c l o s e l y   t o   m i c r o s e r v i c e s ,   w h i c h   a l s o   a r e   i d e a l l y   i m p l e m e n t e d   a s   t h e i r   o w n   i n d i v i d u a l   b o u n d e d   c o n t e x t s .     R e f e r e n c e s     M o d e r n   W e b   A p p l i c a t i o n s     S e p a r a t i o n   o f   C o n c e r n s   h t t p s : / / d e v i q . c o m / s e p a r a t i o n - o f - c o n c e r n s /   E n c a p s u l a t i o n   h t t p s : / / d e v i q . c o m / e n c a p s u l a t i o n /   D e p e n d e n c y   I n v e r s i o n   P r i n c i p l e   h t t p s : / / d e v i q . c o m / d e p e n d e n c y - i n v e r s i o n - p r i n c i p l e /   E x p l i c i t   D e p e n d e n c i e s   P r i n c i p l e   h t t p s : / / d e v i q . c o m / e x p l i c i t - d e p e n d e n c i e s - p r i n c i p l e /   D o n t   R e p e a t   Y o u r s e l f   h t t p s : / / d e v i q . c o m / d o n - t - r e p e a t - y o u r s e l f /         P e r s i s t e n c e   I g n o r a n c e   h t t p s : / / d e v i q . c o m / p e r s i s t e n c e - i g n o r a n c e /   B o u n d e d   C o n t e x t   h t t p s : / / m a r t i n f o w l e r . c o m / b l i k i / B o u n d e d C o n t e x t . h t m l     D o m a i n - D r i v e n   D e s i g n   F u n d a m e n t a l s   h t t p : / / b i t . l y / d d d - f u n d a m e n t a l s     S O L I D   P r i n c i p l e s   o f   O b j e c t   O r i e n t e d   D e s i g n   h t t p : / / b i t . l y / S O L I D - O O P       Evaluation Warning: The document was created with Spire.PDF for .NET
      2 1         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s           S E C T I O N       5     C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s   I f   y o u   t h i n k   g o o d   a r c h i t e c t u r e   i s   e x p e n s i v e ,   t r y   b a d   a r c h i t e c t u r e .   B r i a n   F o o t e   a n d   J o s e p h   Y o d e r   S u m m a r y   M o s t   t r a d i t i o n a l   . N E T   a p p l i c a t i o n s   a r e   d e p l o y e d   a s   s i n g l e   u n i t s   c o r r e s p o n d i n g   t o   a n   e x e c u t a b l e   o r   a   s i n g l e   w e b   a p p l i c a t i o n   r u n n i n g   w i t h i n   a   s i n g l e   I I S   a p p d o m a i n .   T h i s   i s   t h e   s i m p l e s t   d e p l o y m e n t   m o d e l   a n d   s e r v e s   m a n y   i n t e r n a l   a n d   s m a l l e r   p u b l i c   a p p l i c a t i o n s   v e r y   w e l l .   H o w e v e r ,   e v e n   g i v e n   t h i s   s i n g l e   u n i t   o f   d e p l o y m e n t ,   m o s t   n o n - t r i v i a l   b u s i n e s s   a p p l i c a t i o n s   b e n e f i t   f r o m   s o m e   l o g i c a l   s e p a r a t i o n   i n t o   s e v e r a l   l a y e r s .   W h a t   i s   a   m o n o l i t h i c   a p p l i c a t i o n ?   A   m o n o l i t h i c   a p p l i c a t i o n   i s   o n e   t h a t   i s   e n t i r e l y   s e l f - c o n t a i n e d ,   i n   t e r m s   o f   i t s   b e h a v i o r .   I t   m a y   i n t e r a c t   w i t h   o t h e r   s e r v i c e s   o r   d a t a   s t o r e s   i n   t h e   c o u r s e   o f   p e r f o r m i n g   i t s   o p e r a t i o n s ,   b u t   t h e   c o r e   o f   i t s   b e h a v i o r   r u n s   w i t h i n   i t s   o w n   p r o c e s s   a n d   t h e   e n t i r e   a p p l i c a t i o n   i s   t y p i c a l l y   d e p l o y e d   a s   a   s i n g l e   u n i t .   I f   s u c h   a n   a p p l i c a t i o n   n e e d s   t o   s c a l e   h o r i z o n t a l l y ,   t y p i c a l l y   t h e   e n t i r e   a p p l i c a t i o n   i s   d u p l i c a t e d   a c r o s s   m u l t i p l e   s e r v e r s   o r   v i r t u a l   m a c h i n e s .   A l l - i n - O n e   a p p l i c a t i o n s   T h e   s m a l l e s t   p o s s i b l e   n u m b e r   o f   p r o j e c t s   f o r   a n   a p p l i c a t i o n   a r c h i t e c t u r e   i s   o n e .   I n   t h i s   a r c h i t e c t u r e ,   t h e   e n t i r e   l o g i c   o f   t h e   a p p l i c a t i o n   i s   c o n t a i n e d   i n   a   s i n g l e   p r o j e c t ,   c o m p i l e d   t o   a   s i n g l e   a s s e m b l y ,   a n d   d e p l o y e d   a s   a   s i n g l e   u n i t .   A   n e w   A S P . N E T   C o r e   p r o j e c t ,   w h e t h e r   c r e a t e d   i n   V i s u a l   S t u d i o   o r   f r o m   t h e   c o m m a n d   l i n e ,   s t a r t s   o u t   a s   a   s i m p l e   a l l - i n - o n e   m o n o l i t h .   I t   c o n t a i n s   a l l   o f   t h e   b e h a v i o r   o f   t h e   a p p l i c a t i o n ,   i n c l u d i n g   p r e s e n t a t i o n ,   b u s i n e s s ,   a n d   d a t a   a c c e s s   l o g i c .   F i g u r e   5 - 1   s h o w s   t h e   f i l e   s t r u c t u r e   o f   a   s i n g l e - p r o j e c t   a p p .   Evaluation Warning: The document was created with Spire.PDF for .NET
    2 2         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 1 .   A   s i n g l e   p r o j e c t   A S P . N E T   C o r e   a p p   I n   a   s i n g l e   p r o j e c t   s c e n a r i o ,   s e p a r a t i o n   o f   c o n c e r n s   i s   a c h i e v e d   t h r o u g h   t h e   u s e   o f   f o l d e r s .   T h e   d e f a u l t   t e m p l a t e   i n c l u d e s   s e p a r a t e   f o l d e r s   f o r   M V C   p a t t e r n   r e s p o n s i b i l i t i e s   o f   M o d e l s ,   V i e w s ,   a n d   C o n t r o l l e r s ,   a s   w e l l   a s   a d d i t i o n a l   f o l d e r s   f o r   D a t a   a n d   S e r v i c e s .   I n   t h i s   a r r a n g e m e n t ,   p r e s e n t a t i o n   d e t a i l s   s h o u l d   b e   l i m i t e d   a s   m u c h   a s   p o s s i b l e   t o   t h e   V i e w s   f o l d e r ,   a n d   d a t a   a c c e s s   i m p l e m e n t a t i o n   d e t a i l s   s h o u l d   b e   l i m i t e d   t o   c l a s s e s   k e p t   i n   t h e   D a t a   f o l d e r .   B u s i n e s s   l o g i c   s h o u l d   r e s i d e   i n   s e r v i c e s   a n d   c l a s s e s   w i t h i n   t h e   M o d e l s   f o l d e r .   A l t h o u g h   s i m p l e ,   t h e   s i n g l e - p r o j e c t   m o n o l i t h i c   s o l u t i o n   h a s   s o m e   d i s a d v a n t a g e s .   A s   t h e   p r o j e c t s   s i z e   a n d   c o m p l e x i t y   g r o w s ,   t h e   n u m b e r   o f   f i l e s   a n d   f o l d e r s   w i l l   c o n t i n u e   t o   g r o w   a s   w e l l .   U s e r   I n t e r f a c e   ( U I )   c o n c e r n s   ( m o d e l s ,   v i e w s ,   c o n t r o l l e r s )   r e s i d e   i n   m u l t i p l e   f o l d e r s ,   w h i c h   a r e   n o t   g r o u p e d   t o g e t h e r   a l p h a b e t i c a l l y .   T h i s   i s s u e   o n l y   g e t s   w o r s e   w h e n   a d d i t i o n a l   U I - l e v e l   c o n s t r u c t s ,   s u c h   a s   F i l t e r s   o r   M o d e l B i n d e r s ,   a r e   a d d e d   i n   t h e i r   o w n   f o l d e r s .   B u s i n e s s   l o g i c   i s   s c a t t e r e d   b e t w e e n   t h e   M o d e l s   a n d   S e r v i c e s   f o l d e r s ,   a n d   t h e r e s   n o   c l e a r   i n d i c a t i o n   o f   w h i c h   c l a s s e s   i n   w h i c h   f o l d e r s   s h o u l d   d e p e n d   o n   w h i c h   o t h e r s .   T h i s   l a c k   o f   o r g a n i z a t i o n   a t   t h e   p r o j e c t   l e v e l   f r e q u e n t l y   l e a d s   t o   s p a g h e t t i   c o d e .   T o   a d d r e s s   t h e s e   i s s u e s ,   a p p l i c a t i o n s   o f t e n   e v o l v e   i n t o   m u l t i - p r o j e c t   s o l u t i o n s ,   w h e r e   e a c h   p r o j e c t   i s   c o n s i d e r e d   t o   r e s i d e   i n   a   p a r t i c u l a r   l a y e r   o f   t h e   a p p l i c a t i o n .     W h a t   a r e   l a y e r s ?   A s   a p p l i c a t i o n s   g r o w   i n   c o m p l e x i t y ,   o n e   w a y   t o   m a n a g e   t h a t   c o m p l e x i t y   i s   t o   b r e a k   t h e   a p p l i c a t i o n   u p   a c c o r d i n g   t o   i t s   r e s p o n s i b i l i t i e s   o r   c o n c e r n s .   T h i s   f o l l o w s   t h e   s e p a r a t i o n   o f   c o n c e r n s   p r i n c i p l e   a n d   c a n   h e l p   k e e p   a   g r o w i n g   c o d e b a s e   o r g a n i z e d   s o   t h a t   d e v e l o p e r s   c a n   e a s i l y   f i n d   w h e r e   c e r t a i n   f u n c t i o n a l i t y   i s   i m p l e m e n t e d .   L a y e r e d   a r c h i t e c t u r e   o f f e r s   a   n u m b e r   o f   a d v a n t a g e s   b e y o n d   j u s t   c o d e   o r g a n i z a t i o n ,   t h o u g h .   Evaluation Warning: The document was created with Spire.PDF for .NET
    2 3         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     B y   o r g a n i z i n g   c o d e   i n t o   l a y e r s ,   c o m m o n   l o w - l e v e l   f u n c t i o n a l i t y   c a n   b e   r e u s e d   t h r o u g h o u t   t h e   a p p l i c a t i o n .   T h i s   r e u s e   i s   b e n e f i c i a l   b e c a u s e   i t   m e a n s   l e s s   c o d e   n e e d s   t o   b e   w r i t t e n   a n d   b e c a u s e   i t   c a n   a l l o w   t h e   a p p l i c a t i o n   t o   s t a n d a r d i z e   o n   a   s i n g l e   i m p l e m e n t a t i o n ,   f o l l o w i n g   t h e   D o n t   R e p e a t   Y o u r s e l f   p r i n c i p l e .   W i t h   a   l a y e r e d   a r c h i t e c t u r e ,   a p p l i c a t i o n s   c a n   e n f o r c e   r e s t r i c t i o n s   o n   w h i c h   l a y e r s   c a n   c o m m u n i c a t e   w i t h   o t h e r   l a y e r s .   T h i s   h e l p s   t o   a c h i e v e   e n c a p s u l a t i o n .   W h e n   a   l a y e r   i s   c h a n g e d   o r   r e p l a c e d ,   o n l y   t h o s e   l a y e r s   t h a t   w o r k   w i t h   i t   s h o u l d   b e   i m p a c t e d .   B y   l i m i t i n g   w h i c h   l a y e r s   d e p e n d   o n   w h i c h   o t h e r   l a y e r s ,   t h e   i m p a c t   o f   c h a n g e s   c a n   b e   m i t i g a t e d   s o   t h a t   a   s i n g l e   c h a n g e   d o e s n t   i m p a c t   t h e   e n t i r e   a p p l i c a t i o n .   L a y e r s   ( a n d   e n c a p s u l a t i o n )   m a k e   i t   m u c h   e a s i e r   t o   r e p l a c e   f u n c t i o n a l i t y   w i t h i n   t h e   a p p l i c a t i o n .   F o r   e x a m p l e ,   a n   a p p l i c a t i o n   m i g h t   i n i t i a l l y   u s e   i t s   o w n   S Q L   S e r v e r   d a t a b a s e   f o r   p e r s i s t e n c e ,   b u t   l a t e r   c o u l d   c h o o s e   t o   u s e   a   c l o u d - b a s e d   p e r s i s t e n c e   s t r a t e g y ,   o r   o n e   b e h i n d   a   w e b   A P I .   I f   t h e   a p p l i c a t i o n   h a s   p r o p e r l y   e n c a p s u l a t e d   i t s   p e r s i s t e n c e   i m p l e m e n t a t i o n   w i t h i n   a   l o g i c a l   l a y e r ,   t h a t   S Q L   S e r v e r   s p e c i f i c   l a y e r   c o u l d   b e   r e p l a c e d   b y   a   n e w   o n e   i m p l e m e n t i n g   t h e   s a m e   p u b l i c   i n t e r f a c e .   I n   a d d i t i o n   t o   t h e   p o t e n t i a l   o f   s w a p p i n g   o u t   i m p l e m e n t a t i o n s   i n   r e s p o n s e   t o   f u t u r e   c h a n g e s   i n   r e q u i r e m e n t s ,   a p p l i c a t i o n   l a y e r s   c a n   a l s o   m a k e   i t   e a s i e r   t o   s w a p   o u t   i m p l e m e n t a t i o n s   f o r   t e s t i n g   p u r p o s e s .   I n s t e a d   o f   h a v i n g   t o   w r i t e   t e s t s   t h a t   o p e r a t e   a g a i n s t   t h e   r e a l   d a t a   l a y e r   o r   U I   l a y e r   o f   t h e   a p p l i c a t i o n ,   t h e s e   l a y e r s   c a n   b e   r e p l a c e d   a t   t e s t   t i m e   w i t h   f a k e   i m p l e m e n t a t i o n s   t h a t   p r o v i d e   k n o w n   r e s p o n s e s   t o   r e q u e s t s .   T h i s   t y p i c a l l y   m a k e s   t e s t s   m u c h   e a s i e r   t o   w r i t e   a n d   m u c h   f a s t e r   t o   r u n   w h e n   c o m p a r e d   t o   r u n n i n g   t e s t s   a g a i n   t h e   a p p l i c a t i o n s   r e a l   i n f r a s t r u c t u r e .   L o g i c a l   l a y e r i n g   i s   a   c o m m o n   t e c h n i q u e   f o r   i m p r o v i n g   t h e   o r g a n i z a t i o n   o f   c o d e   i n   e n t e r p r i s e   s o f t w a r e   a p p l i c a t i o n s ,   a n d   t h e r e   a r e   s e v e r a l   w a y s   i n   w h i c h   c o d e   c a n   b e   o r g a n i z e d   i n t o   l a y e r s .   N o t e :   L a y e r s   r e p r e s e n t   l o g i c a l   s e p a r a t i o n   w i t h i n   t h e   a p p l i c a t i o n .   I n   t h e   e v e n t   t h a t   a p p l i c a t i o n   l o g i c   i s   p h y s i c a l l y   d i s t r i b u t e d   t o   s e p a r a t e   s e r v e r s   o r   p r o c e s s e s ,   t h e s e   s e p a r a t e   p h y s i c a l   d e p l o y m e n t   t a r g e t s   a r e   r e f e r r e d   t o   a s   t i e r s .   I t s   p o s s i b l e ,   a n d   q u i t e   c o m m o n ,   t o   h a v e   a n   N - L a y e r   a p p l i c a t i o n   t h a t   i s   d e p l o y e d   t o   a   s i n g l e   t i e r .       Evaluation Warning: The document was created with Spire.PDF for .NET
    2 4         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     T r a d i t i o n a l   N - L a y e r   a r c h i t e c t u r e   a p p l i c a t i o n s   T h e   m o s t   c o m m o n   o r g a n i z a t i o n   o f   a p p l i c a t i o n   l o g i c   i n t o   l a y e r s   i s   s h o w n   i n   F i g u r e   5 - 2 .     F i g u r e   5 - 2 .   T y p i c a l   a p p l i c a t i o n   l a y e r s .   T h e s e   l a y e r s   a r e   f r e q u e n t l y   a b b r e v i a t e d   a s   U I ,   B L L   ( B u s i n e s s   L o g i c   L a y e r ) ,   a n d   D A L   ( D a t a   A c c e s s   L a y e r ) .   U s i n g   t h i s   a r c h i t e c t u r e ,   u s e r s   m a k e   r e q u e s t s   t h r o u g h   t h e   U I   l a y e r ,   w h i c h   i n t e r a c t s   o n l y   w i t h   t h e   B L L .   T h e   B L L ,   i n   t u r n ,   c a n   c a l l   t h e   D A L   f o r   d a t a   a c c e s s   r e q u e s t s .   T h e   U I   l a y e r   s h o u l d n t   m a k e   a n y   r e q u e s t s   t o   t h e   D A L   d i r e c t l y ,   n o r   s h o u l d   i t   i n t e r a c t   w i t h   p e r s i s t e n c e   d i r e c t l y   t h r o u g h   o t h e r   m e a n s .   L i k e w i s e ,   t h e   B L L   s h o u l d   o n l y   i n t e r a c t   w i t h   p e r s i s t e n c e   b y   g o i n g   t h r o u g h   t h e   D A L .   I n   t h i s   w a y ,   e a c h   l a y e r   h a s   i t s   o w n   w e l l - k n o w n   r e s p o n s i b i l i t y .   O n e   d i s a d v a n t a g e   o f   t h i s   t r a d i t i o n a l   l a y e r i n g   a p p r o a c h   i s   t h a t   c o m p i l e - t i m e   d e p e n d e n c i e s   r u n   f r o m   t h e   t o p   t o   t h e   b o t t o m .   T h a t   i s ,   t h e   U I   l a y e r   d e p e n d s   o n   t h e   B L L ,   w h i c h   d e p e n d s   o n   t h e   D A L .   T h i s   m e a n s   t h a t   t h e   B L L ,   w h i c h   u s u a l l y   h o l d s   t h e   m o s t   i m p o r t a n t   l o g i c   i n   t h e   a p p l i c a t i o n ,   i s   d e p e n d e n t   o n   d a t a   a c c e s s   i m p l e m e n t a t i o n   d e t a i l s   ( a n d   o f t e n   o n   t h e   e x i s t e n c e   o f   a   d a t a b a s e ) .   T e s t i n g   b u s i n e s s   l o g i c   i n   s u c h   a n   a r c h i t e c t u r e   i s   o f t e n   d i f f i c u l t ,   r e q u i r i n g   a   t e s t   d a t a b a s e .   T h e   d e p e n d e n c y   i n v e r s i o n   p r i n c i p l e   c a n   b e   u s e d   t o   a d d r e s s   t h i s   i s s u e ,   a s   y o u l l   s e e   i n   t h e   n e x t   s e c t i o n .       Evaluation Warning: The document was created with Spire.PDF for .NET
    2 5         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     F i g u r e   5 - 3   s h o w s   a n   e x a m p l e   s o l u t i o n ,   b r e a k i n g   t h e   a p p l i c a t i o n   i n t o   t h r e e   p r o j e c t s   b y   r e s p o n s i b i l i t y   ( o r   l a y e r ) .     F i g u r e   5 - 3 .   A   s i m p l e   m o n o l i t h i c   a p p l i c a t i o n   w i t h   t h r e e   p r o j e c t s .   A l t h o u g h   t h i s   a p p l i c a t i o n   u s e s   s e v e r a l   p r o j e c t s   f o r   o r g a n i z a t i o n a l   p u r p o s e s ,   i t   i s   s t i l l   d e p l o y e d   a s   a   s i n g l e   u n i t   a n d   i t s   c l i e n t s   w i l l   i n t e r a c t   w i t h   i t   a s   a   s i n g l e   w e b   a p p .   T h i s   a l l o w s   f o r   v e r y   s i m p l e   d e p l o y m e n t   p r o c e s s .   F i g u r e   5 - 4   s h o w s   h o w   s u c h   a n   a p p   m i g h t   b e   h o s t e d   u s i n g   A z u r e .       Evaluation Warning: The document was created with Spire.PDF for .NET
    2 6         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s         F i g u r e   5 - 4 .   S i m p l e   d e p l o y m e n t   o f   A z u r e   W e b   A p p   A s   a p p l i c a t i o n   n e e d s   g r o w ,   m o r e   c o m p l e x   a n d   r o b u s t   d e p l o y m e n t   s o l u t i o n s   m a y   b e   r e q u i r e d .   F i g u r e   5 - 5   s h o w s   a n   e x a m p l e   o f   a   m o r e   c o m p l e x   d e p l o y m e n t   p l a n   t h a t   s u p p o r t s   a d d i t i o n a l   c a p a b i l i t i e s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    2 7         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 5 .   D e p l o y i n g   a   w e b   a p p   t o   a n   A z u r e   A p p   S e r v i c e   I n t e r n a l l y ,   t h i s   p r o j e c t s   o r g a n i z a t i o n   i n t o   m u l t i p l e   p r o j e c t s   b a s e d   o n   r e s p o n s i b i l i t y   i m p r o v e s   t h e   m a i n t a i n a b i l i t y   o f   t h e   a p p l i c a t i o n .     T h i s   u n i t   c a n   b e   s c a l e d   u p   o r   o u t   t o   t a k e   a d v a n t a g e   o f   c l o u d - b a s e d   o n - d e m a n d   s c a l a b i l i t y .   S c a l i n g   u p   m e a n s   a d d i n g   a d d i t i o n a l   C P U ,   m e m o r y ,   d i s k   s p a c e ,   o r   o t h e r   r e s o u r c e s   t o   t h e   s e r v e r ( s )   h o s t i n g   y o u r   a p p .   S c a l i n g   o u t   m e a n s   a d d i n g   a d d i t i o n a l   i n s t a n c e s   o f   s u c h   s e r v e r s ,   w h e t h e r   t h e s e   a r e   p h y s i c a l   s e r v e r s   o r   v i r t u a l   m a c h i n e s .   W h e n   y o u r   a p p   i s   h o s t e d   a c r o s s   m u l t i p l e   i n s t a n c e s ,   a   l o a d   b a l a n c e r   i s   u s e d   t o   a s s i g n   r e q u e s t s   t o   i n d i v i d u a l   a p p   i n s t a n c e s .   T h e   s i m p l e s t   a p p r o a c h   t o   s c a l i n g   a   w e b   a p p l i c a t i o n   i n   A z u r e   i s   t o   c o n f i g u r e   s c a l i n g   m a n u a l l y   i n   t h e   a p p l i c a t i o n s   A p p   S e r v i c e   P l a n .   F i g u r e   5 - 6   s h o w s   t h e   a p p r o p r i a t e   A z u r e   d a s h b o a r d   s c r e e n   t o   c o n f i g u r e   h o w   m a n y   i n s t a n c e s   a r e   s e r v i n g   a n   a p p .   Evaluation Warning: The document was created with Spire.PDF for .NET
    2 8         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 6 .   A p p   S e r v i c e   P l a n   s c a l i n g   i n   A z u r e .     C l e a n   a r c h i t e c t u r e   A p p l i c a t i o n s   t h a t   f o l l o w   t h e   D e p e n d e n c y   I n v e r s i o n   P r i n c i p l e   a s   w e l l   a s   t h e   D o m a i n - D r i v e n   D e s i g n   ( D D D )   p r i n c i p l e s   t e n d   t o   a r r i v e   a t   a   s i m i l a r   a r c h i t e c t u r e .   T h i s   a r c h i t e c t u r e   h a s   g o n e   b y   m a n y   n a m e s   o v e r   t h e   y e a r s .   O n e   o f   t h e   f i r s t   n a m e s   w a s   H e x a g o n a l   A r c h i t e c t u r e ,   f o l l o w e d   b y   P o r t s - a n d - A d a p t e r s .   M o r e   r e c e n t l y ,   i t s   b e e n   c i t e d   a s   t h e   O n i o n   A r c h i t e c t u r e   o r   C l e a n   A r c h i t e c t u r e .   T h e   m o s t   r e c e n t   n a m e ,   C l e a n   A r c h i t e c t u r e ,   i s   u s e d   t o   d e s c r i b e   t h i s   a r c h i t e c t u r e   i n   t h i s   e - b o o k .   N o t e :   T h e   t e r m   C l e a n   A r c h i t e c t u r e   c a n   b e   a p p l i e d   t o   a p p l i c a t i o n s   t h a t   a r e   b u i l t   u s i n g   D D D   P r i n c i p l e s   a s   w e l l   a s   t o   t h o s e   t h a t   a r e   n o t   b u i l t   u s i n g   D D D .   I n   t h e   c a s e   o f   t h e   f o r m e r ,   t h i s   c o m b i n a t i o n   m a y   b e   r e f e r r e d   t o   a s   C l e a n   D D D   A r c h i t e c t u r e .   C l e a n   a r c h i t e c t u r e   p u t s   t h e   b u s i n e s s   l o g i c   a n d   a p p l i c a t i o n   m o d e l   a t   t h e   c e n t e r   o f   t h e   a p p l i c a t i o n .   I n s t e a d   o f   h a v i n g   b u s i n e s s   l o g i c   d e p e n d   o n   d a t a   a c c e s s   o r   o t h e r   i n f r a s t r u c t u r e   c o n c e r n s ,   t h i s   d e p e n d e n c y   i s   i n v e r t e d :   i n f r a s t r u c t u r e   a n d   i m p l e m e n t a t i o n   d e t a i l s   d e p e n d   o n   t h e   A p p l i c a t i o n   C o r e .   T h i s   i s   a c h i e v e d   b y   d e f i n i n g   a b s t r a c t i o n s ,   o r   i n t e r f a c e s ,   i n   t h e   A p p l i c a t i o n   C o r e ,   w h i c h   a r e   t h e n   i m p l e m e n t e d   b y   t y p e s   d e f i n e d   i n   t h e   I n f r a s t r u c t u r e   l a y e r .   A   c o m m o n   w a y   o f   v i s u a l i z i n g   t h i s   a r c h i t e c t u r e   i s   t o   u s e   a   s e r i e s   o f   c o n c e n t r i c   c i r c l e s ,   s i m i l a r   t o   a n   o n i o n .   F i g u r e   5 - 7   s h o w s   a n   e x a m p l e   o f   t h i s   s t y l e   o f   a r c h i t e c t u r a l   r e p r e s e n t a t i o n .     Evaluation Warning: The document was created with Spire.PDF for .NET
    2 9         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s         F i g u r e   5 - 7 .   C l e a n   A r c h i t e c t u r e ;   o n i o n   v i e w   I n   t h i s   d i a g r a m ,   d e p e n d e n c i e s   f l o w   t o w a r d   t h e   i n n e r m o s t   c i r c l e .   T h e   A p p l i c a t i o n   C o r e   t a k e s   i t s   n a m e   f r o m   i t s   p o s i t i o n   a t   t h e   c o r e   o f   t h i s   d i a g r a m .   I t   h a s   n o   d e p e n d e n c i e s   o n   o t h e r   a p p l i c a t i o n   l a y e r s .   T h e   a p p l i c a t i o n s   e n t i t i e s   a n d   i n t e r f a c e s   a r e   a t   t h e   v e r y   c e n t e r .   J u s t   o u t s i d e ,   b u t   s t i l l   i n   t h e   A p p l i c a t i o n   C o r e ,   a r e   d o m a i n   s e r v i c e s ,   w h i c h   t y p i c a l l y   i m p l e m e n t   i n t e r f a c e s   d e f i n e d   i n   t h e   i n n e r   c i r c l e .   O u t s i d e   o f   t h e   A p p l i c a t i o n   C o r e ,   b o t h   t h e   U I   a n d   t h e   I n f r a s t r u c t u r e   l a y e r s   d e p e n d   o n   t h e   A p p l i c a t i o n   C o r e ,   b u t   n o t   o n   o n e   a n o t h e r   ( n e c e s s a r i l y ) .   F i g u r e   5 - 8   s h o w s   a   m o r e   t r a d i t i o n a l   h o r i z o n t a l   l a y e r   d i a g r a m   t h a t   b e t t e r   r e f l e c t s   t h e   d e p e n d e n c y   b e t w e e n   t h e   U I   a n d   o t h e r   l a y e r s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 0         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 8 .   C l e a n   A r c h i t e c t u r e ;   h o r i z o n t a l   l a y e r   v i e w   N o t e   t h a t   t h e   s o l i d   a r r o w s   r e p r e s e n t   c o m p i l e - t i m e   d e p e n d e n c i e s ,   w h i l e   t h e   d a s h e d   a r r o w   r e p r e s e n t s   a   r u n t i m e - o n l y   d e p e n d e n c y .   W i t h   t h e   c l e a n   a r c h i t e c t u r e ,   t h e   U I   l a y e r   w o r k s   w i t h   i n t e r f a c e s   d e f i n e d   i n   t h e   A p p l i c a t i o n   C o r e   a t   c o m p i l e   t i m e ,   a n d   i d e a l l y   s h o u l d n t   k n o w   a b o u t   t h e   i m p l e m e n t a t i o n   t y p e s   d e f i n e d   i n   t h e   I n f r a s t r u c t u r e   l a y e r .   A t   r u n   t i m e ,   h o w e v e r ,   t h e s e   i m p l e m e n t a t i o n   t y p e s   a r e   r e q u i r e d   f o r   t h e   a p p   t o   e x e c u t e ,   s o   t h e y   n e e d   t o   b e   p r e s e n t   a n d   w i r e d   u p   t o   t h e   A p p l i c a t i o n   C o r e   i n t e r f a c e s   v i a   d e p e n d e n c y   i n j e c t i o n .   F i g u r e   5 - 9   s h o w s   a   m o r e   d e t a i l e d   v i e w   o f   a n   A S P . N E T   C o r e   a p p l i c a t i o n s   a r c h i t e c t u r e   w h e n   b u i l t   f o l l o w i n g   t h e s e   r e c o m m e n d a t i o n s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 1         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 9 .   A S P . N E T   C o r e   a r c h i t e c t u r e   d i a g r a m   f o l l o w i n g   C l e a n   A r c h i t e c t u r e .   B e c a u s e   t h e   A p p l i c a t i o n   C o r e   d o e s n t   d e p e n d   o n   I n f r a s t r u c t u r e ,   i t s   v e r y   e a s y   t o   w r i t e   a u t o m a t e d   u n i t   t e s t s   f o r   t h i s   l a y e r .   F i g u r e s   5 - 1 0   a n d   5 - 1 1   s h o w   h o w   t e s t s   f i t   i n t o   t h i s   a r c h i t e c t u r e .       F i g u r e   5 - 1 0 .   U n i t   t e s t i n g   A p p l i c a t i o n   C o r e   i n   i s o l a t i o n .   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 2         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s       F i g u r e   5 - 1 1 .   I n t e g r a t i o n   t e s t i n g   I n f r a s t r u c t u r e   i m p l e m e n t a t i o n s   w i t h   e x t e r n a l   d e p e n d e n c i e s .   S i n c e   t h e   U I   l a y e r   d o e s n t   h a v e   a n y   d i r e c t   d e p e n d e n c y   o n   t y p e s   d e f i n e d   i n   t h e   I n f r a s t r u c t u r e   p r o j e c t ,   i t s   l i k e w i s e   v e r y   e a s y   t o   s w a p   o u t   i m p l e m e n t a t i o n s ,   e i t h e r   t o   f a c i l i t a t e   t e s t i n g   o r   i n   r e s p o n s e   t o   c h a n g i n g   a p p l i c a t i o n   r e q u i r e m e n t s .   A S P . N E T   C o r e s   b u i l t - i n   u s e   o f   a n d   s u p p o r t   f o r   d e p e n d e n c y   i n j e c t i o n   m a k e s   t h i s   a r c h i t e c t u r e   t h e   m o s t   a p p r o p r i a t e   w a y   t o   s t r u c t u r e   n o n - t r i v i a l   m o n o l i t h i c   a p p l i c a t i o n s .       Evaluation Warning: The document was created with Spire.PDF for .NET
    3 3         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     F o r   m o n o l i t h i c   a p p l i c a t i o n s   t h e   A p p l i c a t i o n   C o r e ,   I n f r a s t r u c t u r e ,   a n d   U I   p r o j e c t s   a r e   a l l   r u n   a s   a   s i n g l e   a p p l i c a t i o n .   T h e   r u n t i m e   a p p l i c a t i o n   a r c h i t e c t u r e   m i g h t   l o o k   s o m e t h i n g   l i k e   F i g u r e   5 - 1 2 .     F i g u r e   5 - 1 2 .   A   s a m p l e   A S P . N E T   C o r e   a p p s   r u n t i m e   a r c h i t e c t u r e .   O r g a n i z i n g   C o d e   i n   C l e a n   A r c h i t e c t u r e   I n   a   C l e a n   A r c h i t e c t u r e   s o l u t i o n ,   e a c h   p r o j e c t   h a s   c l e a r   r e s p o n s i b i l i t i e s .   A s   s u c h ,   c e r t a i n   t y p e s   b e l o n g   i n   e a c h   p r o j e c t   a n d   y o u l l   f r e q u e n t l y   f i n d   f o l d e r s   c o r r e s p o n d i n g   t o   t h e s e   t y p e s   i n   t h e   a p p r o p r i a t e   p r o j e c t .   T h e   A p p l i c a t i o n   C o r e   h o l d s   t h e   b u s i n e s s   m o d e l ,   w h i c h   i n c l u d e s   e n t i t i e s ,   s e r v i c e s ,   a n d   i n t e r f a c e s .   T h e s e   i n t e r f a c e s   i n c l u d e   a b s t r a c t i o n s   f o r   o p e r a t i o n s   t h a t   w i l l   b e   p e r f o r m e d   u s i n g   I n f r a s t r u c t u r e ,   s u c h   a s   d a t a   a c c e s s ,   f i l e   s y s t e m   a c c e s s ,   n e t w o r k   c a l l s ,   e t c .   S o m e t i m e s   s e r v i c e s   o r   i n t e r f a c e s   d e f i n e d   a t   t h i s   l a y e r   w i l l   n e e d   t o   w o r k   w i t h   n o n - e n t i t y   t y p e s   t h a t   h a v e   n o   d e p e n d e n c i e s   o n   U I   o r   I n f r a s t r u c t u r e .   T h e s e   c a n   b e   d e f i n e d   a s   s i m p l e   D a t a   T r a n s f e r   O b j e c t s   ( D T O s ) .   A p p l i c a t i o n   C o r e   T y p e s       E n t i t i e s   ( b u s i n e s s   m o d e l   c l a s s e s   t h a t   a r e   p e r s i s t e d )   a n d   A g g r e g a t e s     I n t e r f a c e s     S e r v i c e s     D T O s     S p e c i f i c a t i o n s     E x c e p t i o n s     T h e   I n f r a s t r u c t u r e   p r o j e c t   t y p i c a l l y   i n c l u d e s   d a t a   a c c e s s   i m p l e m e n t a t i o n s .   I n   a   t y p i c a l   A S P . N E T   C o r e   w e b   a p p l i c a t i o n ,   t h e s e   i m p l e m e n t a t i o n s   i n c l u d e   t h e   E n t i t y   F r a m e w o r k   ( E F )   D b C o n t e x t ,   a n y   E F   C o r e   M i g r a t i o n   t y p e s   t h a t   h a v e   b e e n   d e f i n e d ,   a n d   d a t a   a c c e s s   i m p l e m e n t a t i o n   c l a s s e s .   T h e   m o s t   c o m m o n   w a y   t o   a b s t r a c t   d a t a   a c c e s s   i m p l e m e n t a t i o n   c o d e   i s   t h r o u g h   t h e   u s e   o f   t h e   R e p o s i t o r y   d e s i g n   p a t t e r n .   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 4         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     I n   a d d i t i o n   t o   d a t a   a c c e s s   i m p l e m e n t a t i o n s ,   t h e   I n f r a s t r u c t u r e   p r o j e c t   s h o u l d   c o n t a i n   i m p l e m e n t a t i o n s   o f   s e r v i c e s   t h a t   m u s t   i n t e r a c t   w i t h   i n f r a s t r u c t u r e   c o n c e r n s .   T h e s e   s e r v i c e s   s h o u l d   i m p l e m e n t   i n t e r f a c e s   d e f i n e d   i n   t h e   A p p l i c a t i o n   C o r e ,   a n d   s o   I n f r a s t r u c t u r e   s h o u l d   h a v e   a   r e f e r e n c e   t o   t h e   A p p l i c a t i o n   C o r e   p r o j e c t .   I f   y o u   f i n d   t h a t   y o u   h a v e   s e r v i c e s   d e f i n e d   i n   I n f r a s t r u c t u r e   t h a t   d o   n o t   d e p e n d   o n   a n y   i n f r a s t r u c t u r e - r e l a t e d   t y p e s ,   s e e   i f   y o u   c a n   m o v e   t h e m   i n t o   y o u r   A p p l i c a t i o n   C o r e   p r o j e c t .   G e n e r a l l y ,   i f   y o u   c a n   m o v e   s e r v i c e s   i n t o   A p p l i c a t i o n   C o r e   ( w i t h o u t   a d d i n g   d e p e n d e n c i e s   t o   t h i s   p r o j e c t ) ,   y o u   s h o u l d   d o   s o .   I n f r a s t r u c t u r e   T y p e s       E F   C o r e   t y p e s   ( D b C o n t e x t ,   M i g r a t i o n s )     D a t a   a c c e s s   i m p l e m e n t a t i o n   t y p e s   ( R e p o s i t o r i e s )     I n f r a s t r u c t u r e - s p e c i f i c   s e r v i c e s   ( F i l e L o g g e r ,   S m t p N o t i f i e r ,   e t c . )     T h e   u s e r   i n t e r f a c e   l a y e r   i n   a n   A S P . N E T   C o r e   M V C - b a s e d   a p p l i c a t i o n   i s   t h e   e n t r y   p o i n t   f o r   t h e   a p p l i c a t i o n .   T h i s   l a y e r   c o n s i s t s   o f   a n   A S P . N E T   C o r e   M V C   ( o r   R a z o r   P a g e s )   p r o j e c t .   T h i s   p r o j e c t   s h o u l d   r e f e r e n c e   t h e   A p p l i c a t i o n   C o r e   p r o j e c t ,   a n d   i t s   t y p e s   s h o u l d   i n t e r a c t   w i t h   i n f r a s t r u c t u r e   s t r i c t l y   t h r o u g h   i n t e r f a c e s   d e f i n e d   i n   A p p l i c a t i o n   C o r e .   N o   d i r e c t   i n s t a n t i a t i o n   o f   ( o r   s t a t i c   c a l l s   t o )   I n f r a s t r u c t u r e   l a y e r   t y p e s   s h o u l d   b e   p e r m i t t e d   i n   t h e   U I   l a y e r .   Y o u r   a p p l i c a t i o n   c a n   a v o i d   r e f e r e n c i n g   t h e   I n f r a s t r u c t u r e   p r o j e c t ,   w h i l e   s t i l l   u s i n g   i t s   t y p e s   a t   r u n t i m e .   O n l y   s e r v i c e s   t h a t   w o r k   w i t h   U I   l a y e r   t y p e s   ( s u c h   a s   V i e w M o d e l   t y p e s )   s h o u l d   b e   d e f i n e d   i n   t h i s   l a y e r .   M o v e   a n y   o t h e r   s e r v i c e s   i n t o   I n f r a s t r u c t u r e   o r   A p p l i c a t i o n   C o r e   l a y e r s ,   a n d   a v o i d   d e f i n i n g   b u s i n e s s   l o g i c   i n   t h e   U I   l a y e r .   U I   L a y e r   T y p e s       C o n t r o l l e r s     F i l t e r s     P a g e s     S e r v i c e s     V i e w s     V i e w M o d e l s     S t a r t u p     T h e   S t a r t u p   c l a s s   i s   r e s p o n s i b l e   f o r   c o n f i g u r i n g   t h e   a p p l i c a t i o n ,   a n d   f o r   w i r i n g   u p   i m p l e m e n t a t i o n   t y p e s   t o   i n t e r f a c e s ,   a l l o w i n g   d e p e n d e n c y   i n j e c t i o n   t o   w o r k   p r o p e r l y   a t   r u n   t i m e .   N o t e :   T o   w i r e   u p   d e p e n d e n c y   i n j e c t i o n   i n   C o n f i g u r e S e r v i c e s   i n   t h e   S t a r t u p . c s   f i l e   o f   t h e   U I   p r o j e c t ,   t h e   p r o j e c t   m a y   n e e d   t o   r e f e r e n c e   t h e   I n f r a s t r u c t u r e   p r o j e c t .   T h i s   d e p e n d e n c y   c a n   b e   e l i m i n a t e d ,   m o s t   e a s i l y   b y   u s i n g   a   c u s t o m   D I   c o n t a i n e r .   F o r   t h e   p u r p o s e s   o f   t h i s   s a m p l e ,   t h e   s i m p l e s t   a p p r o a c h   i s   t o   a l l o w   t h e   U I   p r o j e c t   t o   r e f e r e n c e   t h e   I n f r a s t r u c t u r e   p r o j e c t .       Evaluation Warning: The document was created with Spire.PDF for .NET
    3 5         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     M o n o l i t h i c   A p p l i c a t i o n s   a n d   C o n t a i n e r s     Y o u   c a n   b u i l d   a   s i n g l e   a n d   m o n o l i t h i c - d e p l o y m e n t   b a s e d   W e b   A p p l i c a t i o n   o r   S e r v i c e   a n d   d e p l o y   i t   a s   a   c o n t a i n e r .   W i t h i n   t h e   a p p l i c a t i o n ,   i t   m i g h t   n o t   b e   m o n o l i t h i c   b u t   o r g a n i z e d   i n t o   s e v e r a l   l i b r a r i e s ,   c o m p o n e n t s   o r   l a y e r s .   E x t e r n a l l y   i t   i s   a   s i n g l e   c o n t a i n e r   l i k e   a   s i n g l e   p r o c e s s ,   s i n g l e   w e b   a p p l i c a t i o n   o r   s i n g l e   s e r v i c e .   T o   m a n a g e   t h i s   m o d e l ,   y o u   d e p l o y   a   s i n g l e   c o n t a i n e r   t o   r e p r e s e n t   t h e   a p p l i c a t i o n .   T o   s c a l e ,   j u s t   a d d   a d d i t i o n a l   c o p i e s   w i t h   a   l o a d   b a l a n c e r   i n   f r o n t .   T h e   s i m p l i c i t y   c o m e s   f r o m   m a n a g i n g   a   s i n g l e   d e p l o y m e n t   i n   a   s i n g l e   c o n t a i n e r   o r   V M .       Y o u   c a n   i n c l u d e   m u l t i p l e   c o m p o n e n t s / l i b r a r i e s   o r   i n t e r n a l   l a y e r s   w i t h i n   e a c h   c o n t a i n e r ,   a s   i l l u s t r a t e d   i n   F i g u r e   5 - 1 3 .   B u t ,   f o l l o w i n g   t h e   c o n t a i n e r   p r i n c i p l e   o f   a   c o n t a i n e r   d o e s   o n e   t h i n g ,   a n d   d o e s   i t   i n   o n e   p r o c e s s ,   t h e   m o n o l i t h i c   p a t t e r n   m i g h t   b e   a   c o n f l i c t .       T h e   d o w n s i d e   o f   t h i s   a p p r o a c h   c o m e s   i f / w h e n   t h e   a p p l i c a t i o n   g r o w s ,   r e q u i r i n g   i t   t o   s c a l e .   I f   t h e   e n t i r e   a p p l i c a t i o n   s c a l e s ,   i t s   n o t   r e a l l y   a   p r o b l e m .   H o w e v e r ,   i n   m o s t   c a s e s ,   a   f e w   p a r t s   o f   t h e   a p p l i c a t i o n   a r e   t h e   c h o k e   p o i n t s   r e q u i r i n g   s c a l i n g ,   w h i l e   o t h e r   c o m p o n e n t s   a r e   u s e d   l e s s .     U s i n g   t h e   t y p i c a l   e C o m m e r c e   e x a m p l e ,   w h a t   y o u   l i k e l y   n e e d   t o   s c a l e   i s   t h e   p r o d u c t   i n f o r m a t i o n   c o m p o n e n t .   M a n y   m o r e   c u s t o m e r s   b r o w s e   p r o d u c t s   t h a n   p u r c h a s e   t h e m .   M o r e   c u s t o m e r s   u s e   t h e i r   b a s k e t   t h a n   u s e   t h e   p a y m e n t   p i p e l i n e .   F e w e r   c u s t o m e r s   a d d   c o m m e n t s   o r   v i e w   t h e i r   p u r c h a s e   h i s t o r y .   F i g u r e   5 - 1 3 .   M o n o l i t h i c   a p p l i c a t i o n   a r c h i t e c t u r e   e x a m p l e   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 6         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     A n d   y o u   l i k e l y   o n l y   h a v e   a   h a n d f u l   o f   e m p l o y e e s ,   i n   a   s i n g l e   r e g i o n ,   t h a t   n e e d   t o   m a n a g e   t h e   c o n t e n t   a n d   m a r k e t i n g   c a m p a i g n s .   B y   s c a l i n g   t h e   m o n o l i t h i c   d e s i g n ,   a l l   t h e   c o d e   i s   d e p l o y e d   m u l t i p l e   t i m e s .     I n   a d d i t i o n   t o   t h e   s c a l e   e v e r y t h i n g   p r o b l e m ,   c h a n g e s   t o   a   s i n g l e   c o m p o n e n t   r e q u i r e   c o m p l e t e   r e t e s t i n g   o f   t h e   e n t i r e   a p p l i c a t i o n ,   a n d   a   c o m p l e t e   r e d e p l o y m e n t   o f   a l l   t h e   i n s t a n c e s .     T h e   m o n o l i t h i c   a p p r o a c h   i s   c o m m o n ,   a n d   m a n y   o r g a n i z a t i o n s   a r e   d e v e l o p i n g   w i t h   t h i s   a r c h i t e c t u r a l   a p p r o a c h .   M a n y   a r e   h a v i n g   g o o d   e n o u g h   r e s u l t s ,   w h i l e   o t h e r s   a r e   h i t t i n g   l i m i t s .   M a n y   d e s i g n e d   t h e i r   a p p l i c a t i o n s   i n   t h i s   m o d e l ,   b e c a u s e   t h e   t o o l s   a n d   i n f r a s t r u c t u r e   w e r e   t o o   d i f f i c u l t   t o   b u i l d   s e r v i c e   o r i e n t e d   a r c h i t e c t u r e s   ( S O A ) ,   a n d   t h e y   d i d n t   s e e   t h e   n e e d   -   u n t i l   t h e   a p p   g r e w .   I f   y o u   f i n d   y o u r e   h i t t i n g   t h e   l i m i t s   o f   t h e   m o n o l i t h i c   a p p r o a c h ,   b r e a k i n g   u p   t h e   a p p   t o   e n a b l e   i t   t o   b e t t e r   l e v e r a g e   c o n t a i n e r s   a n d   m i c r o s e r v i c e s   m a y   b e   t h e   n e x t   l o g i c a l   s t e p .   D e p l o y i n g   m o n o l i t h i c   a p p l i c a t i o n s   i n   M i c r o s o f t   A z u r e   c a n   b e   a c h i e v e d   u s i n g   d e d i c a t e d   V M s   f o r   e a c h   i n s t a n c e .   U s i n g   A z u r e   V M   S c a l e   S e t s ,   y o u   c a n   e a s i l y   s c a l e   t h e   V M s .   A z u r e   A p p   S e r v i c e s   c a n   r u n   m o n o l i t h i c   a p p l i c a t i o n s   a n d   e a s i l y   s c a l e   i n s t a n c e s   w i t h o u t   h a v i n g   t o   m a n a g e   t h e   V M s .   A z u r e   A p p   S e r v i c e s   c a n   r u n   s i n g l e   i n s t a n c e s   o f   D o c k e r   c o n t a i n e r s   a s   w e l l ,   s i m p l i f y i n g   t h e   d e p l o y m e n t .   U s i n g   D o c k e r ,   y o u   c a n   d e p l o y   a   s i n g l e   V M   a s   a   D o c k e r   h o s t ,   a n d   r u n   m u l t i p l e   i n s t a n c e s .   U s i n g   t h e   A z u r e   b a l a n c e r ,   a s   s h o w n   i n   t h e   F i g u r e   5 - 1 4 ,   y o u   c a n   m a n a g e   s c a l i n g .       T h e   d e p l o y m e n t   t o   t h e   v a r i o u s   h o s t s   c a n   b e   m a n a g e d   w i t h   t r a d i t i o n a l   d e p l o y m e n t   t e c h n i q u e s .   T h e   D o c k e r   h o s t s   c a n   b e   m a n a g e d   w i t h   c o m m a n d s   l i k e   d o c k e r   r u n   p e r f o r m e d   m a n u a l l y ,   o r   t h r o u g h   a u t o m a t i o n   s u c h   a s   C o n t i n u o u s   D e l i v e r y   ( C D )   p i p e l i n e s .     M o n o l i t h i c   a p p l i c a t i o n   d e p l o y e d   a s   a   c o n t a i n e r   T h e r e   a r e   b e n e f i t s   o f   u s i n g   c o n t a i n e r s   t o   m a n a g e   m o n o l i t h i c   a p p l i c a t i o n   d e p l o y m e n t s .   S c a l i n g   t h e   i n s t a n c e s   o f   c o n t a i n e r s   i s   f a r   f a s t e r   a n d   e a s i e r   t h a n   d e p l o y i n g   a d d i t i o n a l   V M s .   E v e n   w h e n   u s i n g   v i r t u a l   m a c h i n e   s c a l e   s e t s   t o   s c a l e   V M s ,   t h e y   t a k e   t i m e   t o   i n s t a n c e .   W h e n   d e p l o y e d   a s   a p p   i n s t a n c e s ,   t h e   c o n f i g u r a t i o n   o f   t h e   a p p   i s   m a n a g e d   a s   p a r t   o f   t h e   V M .     F i g u r e   5 - 1 4 .   M u l t i p l e   h o s t s   s c a l i n g - o u t   a   s i n g l e   D o c k e r   a p p l i c a t i o n   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 7         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     D e p l o y i n g   u p d a t e s   a s   D o c k e r   i m a g e s   i s   f a r   f a s t e r   a n d   n e t w o r k   e f f i c i e n t .   D o c k e r   I m a g e s   t y p i c a l l y   s t a r t   i n   s e c o n d s ,   s p e e d i n g   r o l l o u t s .   T e a r i n g   d o w n   a   D o c k e r   i n s t a n c e   i s   a s   e a s y   a s   i s s u i n g   a   d o c k e r   s t o p   c o m m a n d ,   t y p i c a l l y   c o m p l e t i n g   i n   l e s s   t h a n   a   s e c o n d .     A s   c o n t a i n e r s   a r e   i n h e r e n t l y   i m m u t a b l e   b y   d e s i g n ,   y o u   n e v e r   n e e d   t o   w o r r y   a b o u t   c o r r u p t e d   V M s ,   w h e r e a s   u p d a t e   s c r i p t s   m i g h t   f o r g e t   t o   a c c o u n t   f o r   s o m e   s p e c i f i c   c o n f i g u r a t i o n   o r   f i l e   l e f t   o n   d i s k .   Y o u   c a n   u s e   D o c k e r   c o n t a i n e r s   f o r   m o n o l i t h i c   d e p l o y m e n t   o f   s i m p l e r   w e b   a p p l i c a t i o n s .   T h i s   i m p r o v e s   c o n t i n u o u s   i n t e g r a t i o n   a n d   c o n t i n u o u s   d e p l o y m e n t   p i p e l i n e s   a n d   h e l p s   a c h i e v e   d e p l o y m e n t - t o - p r o d u c t i o n   s u c c e s s .   N o   m o r e   I t   w o r k s   i n   m y   m a c h i n e ,   w h y   d o e s   i t   n o t   w o r k   i n   p r o d u c t i o n ? _   A   m i c r o s e r v i c e s - b a s e d   a r c h i t e c t u r e   h a s   m a n y   b e n e f i t s ,   b u t   t h o s e   b e n e f i t s   c o m e   a t   a   c o s t   o f   i n c r e a s e d   c o m p l e x i t y .   I n   s o m e   c a s e s ,   t h e   c o s t s   o u t w e i g h   t h e   b e n e f i t s ,   a   m o n o l i t h i c   d e p l o y m e n t   a p p l i c a t i o n   r u n n i n g   i n   a   s i n g l e   c o n t a i n e r   o r   i n   j u s t   a   f e w   c o n t a i n e r s   i s   a   b e t t e r   o p t i o n .   A   m o n o l i t h i c   a p p l i c a t i o n   m i g h t   n o t   b e   e a s i l y   d e c o m p o s a b l e   i n t o   w e l l - s e p a r a t e d   m i c r o s e r v i c e s .   M i c r o s e r v i c e s   s h o u l d   w o r k   i n d e p e n d e n t l y   o f   e a c h   o t h e r   t o   p r o v i d e   a   m o r e   r e s i l i e n t   a p p l i c a t i o n .   I f   y o u   c a n ' t   d e l i v e r   i n d e p e n d e n t   f e a t u r e   s l i c e s   o f   t h e   a p p l i c a t i o n ,   s e p a r a t i n g   i t   o n l y   a d d s   c o m p l e x i t y .   A n   a p p l i c a t i o n   m i g h t   n o t   y e t   n e e d   t o   s c a l e   f e a t u r e s   i n d e p e n d e n t l y .   M a n y   a p p l i c a t i o n s ,   w h e n   t h e y   n e e d   t o   s c a l e   b e y o n d   a   s i n g l e   i n s t a n c e ,   c a n   d o   s o   t h r o u g h   t h e   r e l a t i v e l y   s i m p l e   p r o c e s s   o f   c l o n i n g   t h a t   e n t i r e   i n s t a n c e .   T h e   a d d i t i o n a l   w o r k   t o   s e p a r a t e   t h e   a p p l i c a t i o n   i n t o   d i s c r e t e   s e r v i c e s   p r o v i d e s   m i n i m a l   b e n e f i t   w h e n   s c a l i n g   f u l l   i n s t a n c e s   o f   t h e   a p p l i c a t i o n   i s   s i m p l e   a n d   c o s t - e f f e c t i v e .   E a r l y   i n   t h e   d e v e l o p m e n t   o f   a n   a p p l i c a t i o n ,   y o u   m i g h t   n o t   h a v e   a   c l e a r   i d e a   w h e r e   t h e   n a t u r a l   f u n c t i o n a l   b o u n d a r i e s   a r e .   A s   y o u   d e v e l o p   a   m i n i m u m   v i a b l e   p r o d u c t ,   t h e   n a t u r a l   s e p a r a t i o n   m i g h t   n o t   y e t   h a v e   e m e r g e d .   S o m e   o f   t h e s e   c o n d i t i o n s   m i g h t   b e   t e m p o r a r y .   Y o u   m i g h t   s t a r t   b y   c r e a t i n g   a   m o n o l i t h i c   a p p l i c a t i o n ,   a n d   l a t e r   s e p a r a t e   s o m e   f e a t u r e s   t o   b e   d e v e l o p e d   a n d   d e p l o y e d   a s   m i c r o s e r v i c e s .   O t h e r   c o n d i t i o n s   m i g h t   b e   e s s e n t i a l   t o   t h e   a p p l i c a t i o n s   p r o b l e m   s p a c e ,   m e a n i n g   t h a t   t h e   a p p l i c a t i o n   m i g h t   n e v e r   b e   b r o k e n   i n t o   m u l t i p l e   m i c r o s e r v i c e s .   S e p a r a t i n g   a n   a p p l i c a t i o n   i n t o   m a n y   d i s c r e t e   p r o c e s s e s   a l s o   i n t r o d u c e s   o v e r h e a d .   T h e r e ' s   m o r e   c o m p l e x i t y   i n   s e p a r a t i n g   f e a t u r e s   i n t o   d i f f e r e n t   p r o c e s s e s .   T h e   c o m m u n i c a t i o n   p r o t o c o l s   b e c o m e   m o r e   c o m p l e x .   I n s t e a d   o f   m e t h o d   c a l l s ,   y o u   m u s t   u s e   a s y n c h r o n o u s   c o m m u n i c a t i o n s   b e t w e e n   s e r v i c e s .   A s   y o u   m o v e   t o   a   m i c r o s e r v i c e s   a r c h i t e c t u r e ,   y o u   n e e d   t o   a d d   m a n y   o f   t h e   b u i l d i n g   b l o c k s   i m p l e m e n t e d   i n   t h e   m i c r o s e r v i c e s   v e r s i o n   o f   t h e   e S h o p O n C o n t a i n e r s   a p p l i c a t i o n :   e v e n t   b u s   h a n d l i n g ,   m e s s a g e   r e s i l i e n c y   a n d   r e t r i e s ,   e v e n t u a l   c o n s i s t e n c y ,   a n d   m o r e .   T h e   m u c h   s i m p l e r   e S h o p O n W e b   r e f e r e n c e   a p p l i c a t i o n   s u p p o r t s   s i n g l e - c o n t a i n e r   m o n o l i t h i c   c o n t a i n e r   u s a g e .   T h e   a p p l i c a t i o n   i n c l u d e s   t w o   w e b   a p p l i c a t i o n s :   o n e   u s i n g   t r a d i t i o n a l   M V C   a n d   a n o t h e r   u s i n g   R a z o r   P a g e s .   B o t h   c a n   b e   l a u n c h e d   f r o m   t h e   s o l u t i o n   r o o t   u s i n g   t h e   ` d o c k e r - c o m p o s e   b u i l d `   a n d   ` d o c k e r - c o m p o s e   u p `   c o m m a n d s .   T h i s   c o m m a n d   c o n f i g u r e s   s e p a r a t e   c o n t a i n e r s   f o r   e a c h   w e b   i n s t a n c e ,   u s i n g   t h e   ` D o c k e r f i l e `   f o u n d   i n   e a c h   w e b   p r o j e c t ' s   r o o t ,   a n d   r u n s   e a c h   c o n t a i n e r   o n   a   s e p a r a t e   p o r t .   Y o u   c a n   d o w n l o a d   t h e   s o u r c e   f o r   t h i s   a p p l i c a t i o n   f r o m   G i t H u b   a n d   r u n   i t   l o c a l l y .   E v e n   t h i s   m o n o l i t h i c   a p p l i c a t i o n   b e n e f i t s   f r o m   b e i n g   d e p l o y e d   i n   a   c o n t a i n e r   e n v i r o n m e n t .   F o r   o n e ,   t h e   c o n t a i n e r i z e d   d e p l o y m e n t   m e a n s   t h a t   e v e r y   i n s t a n c e   o f   t h e   a p p l i c a t i o n   r u n s   i n   t h e   s a m e   e n v i r o n m e n t .   T h i s   i n c l u d e s   t h e   d e v e l o p e r   e n v i r o n m e n t   w h e r e   e a r l y   t e s t i n g   a n d   d e v e l o p m e n t   t a k e   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 8         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     p l a c e .   T h e   d e v e l o p m e n t   t e a m   c a n   r u n   t h e   a p p l i c a t i o n   i n   a   c o n t a i n e r i z e d   e n v i r o n m e n t   t h a t   m a t c h e s   t h e   p r o d u c t i o n   e n v i r o n m e n t .   I n   a d d i t i o n ,   c o n t a i n e r i z e d   a p p l i c a t i o n s   s c a l e   o u t   a t   l o w e r   c o s t .   U s i n g   a   c o n t a i n e r   e n v i r o n m e n t   e n a b l e s   g r e a t e r   r e s o u r c e   s h a r i n g   t h a n   t r a d i t i o n a l   V M   e n v i r o n m e n t s .   F i n a l l y ,   c o n t a i n e r i z i n g   t h e   a p p l i c a t i o n   f o r c e s   a   s e p a r a t i o n   b e t w e e n   t h e   b u s i n e s s   l o g i c   a n d   t h e   s t o r a g e   s e r v e r .   A s   t h e   a p p l i c a t i o n   s c a l e s   o u t ,   t h e   m u l t i p l e   c o n t a i n e r s   w i l l   a l l   r e l y   o n   a   s i n g l e   p h y s i c a l   s t o r a g e   m e d i u m .   T h i s   s t o r a g e   m e d i u m   w o u l d   t y p i c a l l y   b e   a   h i g h - a v a i l a b i l i t y   s e r v e r   r u n n i n g   a   S Q L   S e r v e r   d a t a b a s e .   D o c k e r   s u p p o r t   T h e   e S h o p O n W e b   p r o j e c t   r u n s   o n   . N E T   C o r e .   T h e r e f o r e ,   i t   c a n   r u n   i n   e i t h e r   L i n u x - b a s e d   o r   W i n d o w s - b a s e d   c o n t a i n e r s .   N o t e   t h a t   f o r   D o c k e r   d e p l o y m e n t ,   y o u   w a n t   t o   u s e   t h e   s a m e   h o s t   t y p e   f o r   S Q L   S e r v e r .   L i n u x - b a s e d   c o n t a i n e r s   a l l o w   a   s m a l l e r   f o o t p r i n t   a n d   a r e   p r e f e r r e d .   Y o u   c a n   u s e   V i s u a l   S t u d i o   2 0 1 7   t o   a d d   D o c k e r   s u p p o r t   t o   a n   e x i s t i n g   a p p l i c a t i o n   b y   r i g h t - c l i c k i n g   o n   a   p r o j e c t   i n   S o l u t i o n   E x p l o r e r   a n d   c h o o s i n g   A d d   >   D o c k e r   S u p p o r t .   T h i s   a d d s   t h e   f i l e s   r e q u i r e d   a n d   m o d i f i e s   t h e   p r o j e c t   t o   u s e   t h e m .   T h e   c u r r e n t   e S h o p O n W e b   s a m p l e   a l r e a d y   h a s   t h e s e   f i l e s   i n   p l a c e .   T h e   s o l u t i o n - l e v e l   ` d o c k e r - c o m p o s e . y m l `   f i l e   c o n t a i n s   i n f o r m a t i o n   a b o u t   w h a t   i m a g e s   t o   b u i l d   a n d   w h a t   c o n t a i n e r s   t o   l a u n c h .   T h e   f i l e   a l l o w s   y o u   t o   u s e   t h e   ` d o c k e r - c o m p o s e `   c o m m a n d   t o   l a u n c h   b o t h   v e r s i o n s   o f   t h e   w e b   a p p l i c a t i o n   a t   t h e   s a m e   t i m e .   Y o u   c a n   a l s o   u s e   i t   t o   c o n f i g u r e   d e p e n d e n c i e s ,   s u c h   a s   a   s e p a r a t e   d a t a b a s e   c o n t a i n e r .   v e r s i o n :   ' 3 '     s e r v i c e s :       e s h o p w e b r a z o r :           i m a g e :   e s h o p w e b r a z o r           b u i l d :               c o n t e x t :   .               d o c k e r f i l e :   s r c / W e b R a z o r P a g e s / D o c k e r f i l e           e n v i r o n m e n t :               -   A S P N E T C O R E _ E N V I R O N M E N T = D e v e l o p m e n t           p o r t s :               -   " 5 1 0 7 : 5 1 0 7 "         e s h o p w e b m v c :           i m a g e :   e s h o p w e b m v c           b u i l d :               c o n t e x t :   .               d o c k e r f i l e :   s r c / W e b / D o c k e r f i l e           e n v i r o n m e n t :               -   A S P N E T C O R E _ E N V I R O N M E N T = D e v e l o p m e n t           p o r t s :   Evaluation Warning: The document was created with Spire.PDF for .NET
    3 9         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s                 -   " 5 1 0 6 : 5 1 0 6 "     n e t w o r k s :       d e f a u l t :           e x t e r n a l :               n a m e :   n a t     T h e   ` d o c k e r - c o m p o s e . y m l `   f i l e   r e f e r e n c e s   t h e   ` D o c k e r f i l e `   i n   t h e   ` W e b `   a n d   ` W e b R a z o r P a g e s `   p r o j e c t s .   T h e   ` D o c k e r f i l e `   i s   u s e d   t o   s p e c i f y   w h i c h   b a s e   c o n t a i n e r   w i l l   b e   u s e d   a n d   h o w   t h e   a p p l i c a t i o n   w i l l   b e   c o n f i g u r e d   o n   i t .   T h e   ` W e b R a z o r P a g e s ` '   ` D o c k e r f i l e ` :   F R O M   m i c r o s o f t / d o t n e t : 2 . 1 - a s p n e t c o r e - r u n t i m e   A S   b a s e   W O R K D I R   / a p p   E X P O S E   8 0     F R O M   m i c r o s o f t / a s p n e t c o r e - b u i l d : 2 . 1 . 3 0 0 - p r e v i e w 1   A S   b u i l d   R U N   n p m   i n s t a l l   - g   b o w e r @ 1 . 8 . 4   W O R K D I R   / s r c   C O P Y   .   .   W O R K D I R   / s r c / s r c / W e b R a z o r P a g e s   R U N   d o t n e t   r e s t o r e   - n o w a r n : m s b 3 2 0 2 , n u 1 5 0 3   R U N   d o t n e t   b u i l d   - - n o - r e s t o r e   - c   R e l e a s e   - o   / a p p     F R O M   b u i l d   A S   p u b l i s h   R U N   d o t n e t   p u b l i s h   - - n o - r e s t o r e   - c   R e l e a s e   - o   / a p p     F R O M   b a s e   A S   f i n a l   W O R K D I R   / a p p   C O P Y   - - f r o m = p u b l i s h   / a p p   .   E N T R Y P O I N T   [ " d o t n e t " ,   " M i c r o s o f t . e S h o p W e b . R a z o r P a g e s . d l l " ]   T r o u b l e s h o o t i n g   D o c k e r   p r o b l e m s   O n c e   y o u   r u n   t h e   c o n t a i n e r i z e d   a p p l i c a t i o n ,   i t   c o n t i n u e s   t o   r u n   u n t i l   y o u   s t o p   i t .   Y o u   c a n   v i e w   w h i c h   c o n t a i n e r s   a r e   r u n n i n g   w i t h   t h e   ` d o c k e r   p s `   c o m m a n d .   Y o u   c a n   s t o p   a   r u n n i n g   c o n t a i n e r   b y   u s i n g   t h e   ` d o c k e r   s t o p `   c o m m a n d   a n d   s p e c i f y i n g   t h e   c o n t a i n e r   I D .   N o t e   t h a t   r u n n i n g   D o c k e r   c o n t a i n e r s   m a y   b e   b o u n d   t o   p o r t s   y o u   m i g h t   o t h e r w i s e   t r y   t o   u s e   i n   y o u r   d e v e l o p m e n t   e n v i r o n m e n t .   I f   y o u   t r y   t o   r u n   o r   d e b u g   a n   a p p l i c a t i o n   u s i n g   t h e   s a m e   p o r t   a s   a   r u n n i n g   D o c k e r   c o n t a i n e r ,   y o u ' l l   g e t   a n   e r r o r   s t a t i n g   t h a t   t h e   s e r v e r   c a n ' t   b i n d   t o   t h a t   p o r t .   O n c e   a g a i n ,   s t o p p i n g   t h e   c o n t a i n e r   s h o u l d   r e s o l v e   t h e   i s s u e .   I f   y o u   w a n t   t o   a d d   D o c k e r   s u p p o r t   t o   y o u r   a p p l i c a t i o n   u s i n g   V i s u a l   S t u d i o ,   m a k e   s u r e   D o c k e r   i s   r u n n i n g   w h e n   y o u   d o   s o .   T h e   w i z a r d   w o n ' t   r u n   c o r r e c t l y   i f   D o c k e r   i s n ' t   r u n n i n g   w h e n   y o u   s t a r t   t h e   w i z a r d .   I n   a d d i t i o n ,   t h e   w i z a r d   e x a m i n e s   y o u r   c u r r e n t   c o n t a i n e r   c h o i c e   t o   a d d   t h e   c o r r e c t   D o c k e r   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 0         C h a p t e r   5   C o m m o n   W e b   A p p l i c a t i o n   A r c h i t e c t u r e s     s u p p o r t .   I f   y o u   w a n t   t o   a d d   s u p p o r t   f o r   W i n d o w s   C o n t a i n e r s ,   y o u   n e e d   t o   r u n   t h e   w i z a r d   w h i l e   y o u   h a v e   D o c k e r   r u n n i n g   w i t h   W i n d o w s   C o n t a i n e r s   c o n f i g u r e d .   I f   y o u   w a n t   t o   a d d   s u p p o r t   f o r   L i n u x   c o n t a i n e r s ,   r u n   t h e   w i z a r d   w h i l e   y o u   h a v e   D o c k e r   r u n n i n g   w i t h   L i n u x   c o n t a i n e r s   c o n f i g u r e d .       R e f e r e n c e s     C o m m o n   W e b   A r c h i t e c t u r e s     C r e a t i n g   N - T i e r   A p p l i c a t i o n s   i n   C #   h t t p : / / b i t . l y / P S - N T i e r 1   T h e   C l e a n   A r c h i t e c t u r e   h t t p s : / / 8 t h l i g h t . c o m / b l o g / u n c l e - b o b / 2 0 1 2 / 0 8 / 1 3 / t h e - c l e a n - a r c h i t e c t u r e . h t m l   T h e   O n i o n   A r c h i t e c t u r e   h t t p : / / j e f f r e y p a l e r m o . c o m / b l o g / t h e - o n i o n - a r c h i t e c t u r e - p a r t - 1 /   T h e   R e p o s i t o r y   P a t t e r n   h t t p s : / / d e v i q . c o m / r e p o s i t o r y - p a t t e r n /   C l e a n   A r c h i t e c t u r e   S o l u t i o n   S a m p l e   h t t p s : / / g i t h u b . c o m / a r d a l i s / c l e a n a r c h i t e c t u r e   A r c h i t e c t i n g   M i c r o s e r v i c e s   e B o o k   h t t p : / / a k a . m s / M i c r o s e r v i c e s E b o o k               Evaluation Warning: The document was created with Spire.PDF for .NET
      4 1         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s           S E C T I O N       6     C o m m o n   C l i e n t - S i d e   W e b   T e c h n o l o g i e s   W e b s i t e s   s h o u l d   l o o k   g o o d   f r o m   t h e   i n s i d e   a n d   o u t .   P a u l   C o o k s o n     S u m m a r y   A S P . N E T   C o r e   a p p l i c a t i o n s   a r e   w e b   a p p l i c a t i o n s   a n d   t h e y   t y p i c a l l y   r e l y   o n   c l i e n t - s i d e   w e b   t e c h n o l o g i e s   l i k e   H T M L ,   C S S ,   a n d   J a v a S c r i p t .   B y   s e p a r a t i n g   t h e   c o n t e n t   o f   t h e   p a g e   ( t h e   H T M L )   f r o m   i t s   l a y o u t   a n d   s t y l i n g   ( t h e   C S S ) ,   a n d   i t s   b e h a v i o r   ( v i a   J a v a S c r i p t ) ,   c o m p l e x   w e b   a p p s   c a n   l e v e r a g e   t h e   S e p a r a t i o n   o f   C o n c e r n s   p r i n c i p l e .   F u t u r e   c h a n g e s   t o   t h e   s t r u c t u r e ,   d e s i g n ,   o r   b e h a v i o r   o f   t h e   a p p l i c a t i o n   c a n   b e   m a d e   m o r e   e a s i l y   w h e n   t h e s e   c o n c e r n s   a r e   n o t   i n t e r t w i n e d .   W h i l e   H T M L   a n d   C S S   a r e   r e l a t i v e l y   s t a b l e ,   J a v a S c r i p t ,   b y   m e a n s   o f   t h e   a p p l i c a t i o n   f r a m e w o r k s   a n d   u t i l i t i e s   d e v e l o p e r s   w o r k   w i t h   t o   b u i l d   w e b - b a s e d   a p p l i c a t i o n s ,   i s   e v o l v i n g   a t   b r e a k n e c k   s p e e d .   T h i s   c h a p t e r   l o o k s   a t   a   f e w   w a y s   J a v a S c r i p t   i s   u s e d   b y   w e b   d e v e l o p e r s   a s   p a r t   o f   d e v e l o p i n g   a p p l i c a t i o n s ,   a s   p r o v i d e s   a   h i g h - l e v e l   o v e r v i e w   o f   t h e   A n g u l a r   a n d   R e a c t   c l i e n t - s i d e   l i b r a r i e s .   H T M L   H T M L   ( H y p e r T e x t   M a r k u p   L a n g u a g e )   i s   t h e   s t a n d a r d   m a r k u p   l a n g u a g e   u s e d   t o   c r e a t e   w e b   p a g e s   a n d   w e b   a p p l i c a t i o n s .   I t s   e l e m e n t s   f o r m   t h e   b u i l d i n g   b l o c k s   o f   p a g e s ,   r e p r e s e n t i n g   f o r m a t t e d   t e x t ,   i m a g e s ,   f o r m   i n p u t s ,   a n d   o t h e r   s t r u c t u r e s .   W h e n   a   b r o w s e r   m a k e s   a   r e q u e s t   t o   a   U R L ,   w h e t h e r   f e t c h i n g   a   p a g e   o r   a n   a p p l i c a t i o n ,   t h e   f i r s t   t h i n g   t h a t   i s   r e t u r n e d   i s   a n   H T M L   d o c u m e n t .   T h i s   H T M L   d o c u m e n t   m a y   r e f e r e n c e   o r   i n c l u d e   a d d i t i o n a l   i n f o r m a t i o n   a b o u t   i t s   l o o k   a n d   l a y o u t   i n   t h e   f o r m   o f   C S S ,   o r   b e h a v i o r   i n   t h e   f o r m   o f   J a v a S c r i p t .   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 2         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s     C S S   C S S   ( C a s c a d i n g   S t y l e   S h e e t s )   i s   u s e d   t o   c o n t r o l   t h e   l o o k   a n d   l a y o u t   o f   H T M L   e l e m e n t s .   C S S   s t y l e s   c a n   b e   a p p l i e d   d i r e c t l y   t o   a n   H T M L   e l e m e n t ,   d e f i n e d   s e p a r a t e l y   o n   t h e   s a m e   p a g e ,   o r   d e f i n e d   i n   a   s e p a r a t e   f i l e   a n d   r e f e r e n c e d   b y   t h e   p a g e .   S t y l e s   c a s c a d e   b a s e d   o n   h o w   t h e y   a r e   u s e d   t o   s e l e c t   a   g i v e n   H T M L   e l e m e n t .   F o r   i n s t a n c e ,   a   s t y l e   m i g h t   a p p l y   t o   a n   e n t i r e   d o c u m e n t ,   b u t   w o u l d   b e   o v e r r i d d e n   b y   a   s t y l e   t h a t   a p p l i e d   t o   a   p a r t i c u l a r   e l e m e n t .   L i k e w i s e ,   a n   e l e m e n t - s p e c i f i c   s t y l e   w o u l d   b e   o v e r r i d d e n   b y   a   s t y l e   t h a t   a p p l i e d   t o   a   C S S   c l a s s   t h a t   w a s   a p p l i e d   t o   t h e   e l e m e n t ,   w h i c h   i n   t u r n   w o u l d   b e   o v e r r i d d e n   b y   a   s t y l e   t a r g e t i n g   a   s p e c i f i c   i n s t a n c e   o f   t h a t   e l e m e n t   ( v i a   i t s   i d ) .   F i g u r e   7 - 1 .       F i g u r e   6 - 1 .   C S S   S p e c i f i c i t y   r u l e s ,   i n   o r d e r .     I t s   b e s t   t o   k e e p   s t y l e s   i n   t h e i r   o w n   s e p a r a t e   s t y l e s h e e t   f i l e s ,   a n d   t o   u s e   s e l e c t i o n - b a s e d   c a s c a d i n g   t o   i m p l e m e n t   c o n s i s t e n t   a n d   r e u s a b l e   s t y l e s   w i t h i n   t h e   a p p l i c a t i o n .   P l a c i n g   s t y l e   r u l e s   w i t h i n   H T M L   s h o u l d   b e   a v o i d e d   a n d   a p p l y i n g   s t y l e s   t o   s p e c i f i c   i n d i v i d u a l   e l e m e n t s   ( r a t h e r   t h a n   w h o l e   c l a s s e s   o f   e l e m e n t s ,   o r   e l e m e n t s   t h a t   h a v e   h a d   a   p a r t i c u l a r   C S S   c l a s s   a p p l i e d   t o   t h e m )   s h o u l d   b e   t h e   e x c e p t i o n ,   n o t   t h e   r u l e .   C S S   P r e p r o c e s s o r s   C S S   s t y l e s h e e t s   l a c k   s u p p o r t   f o r   c o n d i t i o n a l   l o g i c ,   v a r i a b l e s ,   a n d   o t h e r   p r o g r a m m i n g   l a n g u a g e   f e a t u r e s .   T h u s ,   l a r g e   s t y l e s h e e t s   o f t e n   i n c l u d e   a   l o t   o f   r e p e t i t i o n ,   a s   t h e   s a m e   c o l o r ,   f o n t ,   o r   o t h e r   s e t t i n g   i s   a p p l i e d   t o   m a n y   d i f f e r e n t   v a r i a t i o n s   o f   H T M L   e l e m e n t s   a n d   C S S   c l a s s e s .   C S S   p r e p r o c e s s o r s   c a n   h e l p   y o u r   s t y l e s h e e t s   f o l l o w   t h e   D R Y   p r i n c i p l e   b y   a d d i n g   s u p p o r t   f o r   v a r i a b l e s   a n d   l o g i c .   T h e   m o s t   p o p u l a r   C S S   p r e p r o c e s s o r s   a r e   S a s s   a n d   L E S S .   B o t h   e x t e n d   C S S   a n d   a r e   b a c k w a r d   c o m p a t i b l e   w i t h   i t ,   m e a n i n g   t h a t   a   p l a i n   C S S   f i l e   i s   a   v a l i d   S a s s   o r   L E S S   f i l e .   S a s s   i s   R u b y - b a s e d   a n d   L E S S   i s   J a v a S c r i p t   b a s e d ,   a n d   b o t h   t y p i c a l l y   r u n   a s   p a r t   o f   y o u r   l o c a l   d e v e l o p m e n t   p r o c e s s .   B o t h   h a v e   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 3         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s     c o m m a n d   l i n e   t o o l s   a v a i l a b l e ,   a s   w e l l   a s   b u i l t - i n   s u p p o r t   i n   V i s u a l   S t u d i o   f o r   r u n n i n g   t h e m   u s i n g   G u l p   o r   G r u n t   t a s k s .     J a v a S c r i p t   J a v a S c r i p t   i s   a   d y n a m i c ,   i n t e r p r e t e d   p r o g r a m m i n g   l a n g u a g e   t h a t   h a s   b e e n   s t a n d a r d i z e d   i n   t h e   E C M A S c r i p t   l a n g u a g e   s p e c i f i c a t i o n .   I t   i s   t h e   p r o g r a m m i n g   l a n g u a g e   o f   t h e   w e b .   L i k e   C S S ,   J a v a S c r i p t   c a n   b e   d e f i n e d   a s   a t t r i b u t e s   w i t h i n   H T M L   e l e m e n t s ,   a s   b l o c k s   o f   s c r i p t   w i t h i n   a   p a g e ,   o r   i n   s e p a r a t e   f i l e s .   J u s t   l i k e   C S S ,   i t s   g e n e r a l l y   r e c o m m e n d e d   t o   o r g a n i z e   J a v a S c r i p t   i n t o   s e p a r a t e   f i l e s ,   k e e p i n g   i t   s e p a r a t e d   a s   m u c h   a s   p o s s i b l e   f r o m   t h e   H T M L   f o u n d   o n   i n d i v i d u a l   w e b   p a g e s   o r   a p p l i c a t i o n   v i e w s .   W h e n   w o r k i n g   w i t h   J a v a S c r i p t   i n   y o u r   w e b   a p p l i c a t i o n ,   t h e r e   a r e   a   f e w   t a s k s   t h a t   y o u l l   c o m m o n l y   n e e d   t o   p e r f o r m :     S e l e c t i n g   a n   H T M L   e l e m e n t   a n d   r e t r i e v i n g   a n d / o r   u p d a t i n g   i t s   v a l u e     Q u e r y i n g   a   W e b   A P I   f o r   d a t a     S e n d i n g   a   c o m m a n d   t o   a   W e b   A P I   ( a n d   r e s p o n d i n g   t o   a   c a l l b a c k   w i t h   i t s   r e s u l t )     P e r f o r m i n g   v a l i d a t i o n   Y o u   c a n   p e r f o r m   a l l   o f   t h e s e   t a s k s   w i t h   J a v a S c r i p t   a l o n e ,   b u t   m a n y   l i b r a r i e s   e x i s t   t o   m a k e   t h e s e   t a s k s   e a s i e r .   O n e   o f   t h e   f i r s t   a n d   m o s t   s u c c e s s f u l   o f   t h e s e   l i b r a r i e s   i s   j Q u e r y ,   w h i c h   c o n t i n u e s   t o   b e   a   p o p u l a r   c h o i c e   f o r   s i m p l i f y i n g   t h e s e   t a s k s   o n   w e b   p a g e s .   F o r   S i n g l e   P a g e   A p p l i c a t i o n s   ( S P A s ) ,   j Q u e r y   d o e s n t   p r o v i d e   m a n y   o f   t h e   d e s i r e d   f e a t u r e s   t h a t   A n g u l a r   a n d   R e a c t   o f f e r .   L e g a c y   W e b   A p p s   w i t h   j Q u e r y   A l t h o u g h   a n c i e n t   b y   J a v a S c r i p t   f r a m e w o r k   s t a n d a r d s ,   j Q u e r y   c o n t i n u e s   t o   b e   a   v e r y   c o m m o n l y   u s e d   l i b r a r y   f o r   w o r k i n g   w i t h   H T M L / C S S   a n d   b u i l d i n g   a p p l i c a t i o n s   t h a t   m a k e   A J A X   c a l l s   t o   w e b   A P I s .   H o w e v e r ,   j Q u e r y   o p e r a t e s   a t   t h e   l e v e l   o f   t h e   b r o w s e r   d o c u m e n t   o b j e c t   m o d e l   ( D O M ) ,   a n d   b y   d e f a u l t   o f f e r s   o n l y   a n   i m p e r a t i v e ,   r a t h e r   t h a n   d e c l a r a t i v e ,   m o d e l .     F o r   e x a m p l e ,   i m a g i n e   t h a t   i f   a   t e x t b o x s   v a l u e   e x c e e d s   1 0 ,   a n   e l e m e n t   o n   t h e   p a g e   s h o u l d   b e   m a d e   v i s i b l e .   I n   j Q u e r y ,   t h i s   w o u l d   t y p i c a l l y   b e   i m p l e m e n t e d   b y   w r i t i n g   a n   e v e n t   h a n d l e r   w i t h   c o d e   t h a t   w o u l d   i n s p e c t   t h e   t e x t b o x s   v a l u e   a n d   s e t   t h e   v i s i b i l i t y   o f   t h e   t a r g e t   e l e m e n t   b a s e d   o n   t h a t   v a l u e .   T h i s   i s   a n   i m p e r a t i v e ,   c o d e - b a s e d   a p p r o a c h .   A n o t h e r   f r a m e w o r k   m i g h t   i n s t e a d   u s e   d a t a b i n d i n g   t o   b i n d   t h e   v i s i b i l i t y   o f   t h e   e l e m e n t   t o   t h e   v a l u e   o f   t h e   t e x t b o x   d e c l a r a t i v e l y .   T h i s   w o u l d   n o t   r e q u i r e   w r i t i n g   a n y   c o d e ,   b u t   i n s t e a d   o n l y   r e q u i r e s   d e c o r a t i n g   t h e   e l e m e n t s   i n v o l v e d   w i t h   d a t a   b i n d i n g   a t t r i b u t e s .   A s   c l i e n t - s i d e   b e h a v i o r s   g r o w   m o r e   c o m p l e x ,   d a t a   b i n d i n g   a p p r o a c h e s   f r e q u e n t l y   r e s u l t   i n   s i m p l e r   s o l u t i o n s   w i t h   l e s s   c o d e   a n d   c o n d i t i o n a l   c o m p l e x i t y .   j Q u e r y   v s   a   S P A   F r a m e w o r k   F a c t o r   j Q u e r y   A n g u l a r   A b s t r a c t s   t h e   D O M   Y e s   Y e s   A J A X   S u p p o r t   Y e s   Y e s     D e c l a r a t i v e   D a t a   B i n d i n g   N o   Y e s   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 4         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s     M V C - s t y l e   R o u t i n g   N o   Y e s   T e m p l a t i n g   N o   Y e s   D e e p - L i n k   R o u t i n g   N o   Y e s     M o s t   o f   t h e   f e a t u r e s   j Q u e r y   l a c k s   i n t r i n s i c a l l y   c a n   b e   a d d e d   w i t h   t h e   a d d i t i o n   o f   o t h e r   l i b r a r i e s .   H o w e v e r ,   a   S P A   f r a m e w o r k   l i k e   A n g u l a r   p r o v i d e s   t h e s e   f e a t u r e s   i n   a   m o r e   i n t e g r a t e d   f a s h i o n ,   s i n c e   i t s   b e e n   d e s i g n e d   w i t h   a l l   o f   t h e m   i n   m i n d   f r o m   t h e   s t a r t .   A l s o ,   j Q u e r y   i s   a   v e r y   i m p e r a t i v e   l i b r a r y ,   m e a n i n g   t h a t   y o u   n e e d   t o   c a l l   j Q u e r y   f u n c t i o n s   i n   o r d e r   t o   d o   a n y t h i n g   w i t h   j Q u e r y .   M u c h   o f   t h e   w o r k   a n d   f u n c t i o n a l i t y   t h a t   S P A   f r a m e w o r k s   p r o v i d e   c a n   b e   d o n e   d e c l a r a t i v e l y ,   r e q u i r i n g   n o   a c t u a l   c o d e   t o   b e   w r i t t e n .   D a t a   b i n d i n g   i s   a   g r e a t   e x a m p l e   o f   t h i s .   I n   j Q u e r y ,   i t   u s u a l l y   o n l y   t a k e s   o n e   l i n e   o f   c o d e   t o   g e t   t h e   v a l u e   o f   a   D O M   e l e m e n t ,   o r   t o   s e t   a n   e l e m e n t s   v a l u e .   H o w e v e r ,   y o u   h a v e   t o   w r i t e   t h i s   c o d e   a n y   t i m e   y o u   n e e d   t o   c h a n g e   t h e   v a l u e   o f   t h e   e l e m e n t ,   a n d   s o m e t i m e s   t h i s   w i l l   o c c u r   i n   m u l t i p l e   f u n c t i o n s   o n   a   p a g e .   A n o t h e r   c o m m o n   e x a m p l e   i s   e l e m e n t   v i s i b i l i t y .   I n   j Q u e r y ,   t h e r e   m i g h t   b e   m a n y   d i f f e r e n t   p l a c e s   w h e r e   y o u   w o u l d   w r i t e   c o d e   t o   c o n t r o l   w h e t h e r   c e r t a i n   e l e m e n t s   w e r e   v i s i b l e .   I n   e a c h   o f   t h e s e   c a s e s ,   w h e n   u s i n g   d a t a   b i n d i n g ,   n o   c o d e   w o u l d   n e e d   t o   b e   w r i t t e n .   Y o u   w o u l d   s i m p l y   b i n d   t h e   v a l u e   o r   v i s i b i l i t y   o f   t h e   e l e m e n t ( s )   i n   q u e s t i o n   t o   a   v i e w m o d e l   o n   t h e   p a g e ,   a n d   c h a n g e s   t o   t h a t   v i e w m o d e l   w o u l d   a u t o m a t i c a l l y   b e   r e f l e c t e d   i n   t h e   b o u n d   e l e m e n t s .   A n g u l a r   S P A s   A n g u l a r J S   q u i c k l y   b e c a m e   o n e   o f   t h e   w o r l d s   m o s t   p o p u l a r   J a v a S c r i p t   f r a m e w o r k s .   W i t h   A n g u l a r   2 ,   t h e   t e a m   r e b u i l t   t h e   f r a m e w o r k   f r o m   t h e   g r o u n d   u p   ( u s i n g   T y p e S c r i p t )   a n d   r e b r a n d e d   f r o m   A n g u l a r J S   t o   s i m p l y   A n g u l a r .   C u r r e n t l y   o n   v e r s i o n   6 ,   A n g u l a r   c o n t i n u e s   t o   b e   a   r o b u s t   f r a m e w o r k   f o r   b u i l d i n g   S i n g l e   P a g e   A p p l i c a t i o n s .   A n g u l a r   a p p l i c a t i o n s   a r e   b u i l t   f r o m   c o m p o n e n t s .   C o m p o n e n t s   c o m b i n e   H T M L   t e m p l a t e s   w i t h   s p e c i a l   o b j e c t s   a n d   c o n t r o l   a   p o r t i o n   o f   t h e   p a g e .   A   s i m p l e   c o m p o n e n t   f r o m   A n g u l a r s   d o c s   i s   s h o w n   h e r e :   i m p o r t   {   C o m p o n e n t   }   f r o m   ' @ a n g u l a r / c o r e ' ;   @ C o m p o n e n t ( {       s e l e c t o r :   ' m y - a p p ' ,       t e m p l a t e :   ` < h 1 > H e l l o   { { n a m e } } < / h 1 > `   } )   e x p o r t   c l a s s   A p p C o m p o n e n t   {   n a m e   =   ' A n g u l a r ' ;   }   C o m p o n e n t s   a r e   d e f i n e d   u s i n g   t h e   @ C o m p o n e n t   d e c o r a t o r   f u n c t i o n ,   w h i c h   t a k e s   i n   m e t a d a t a   a b o u t   t h e   c o m p o n e n t .   T h e   s e l e c t o r   p r o p e r t y   i d e n t i f i e s   t h e   i d   o f   t h e   e l e m e n t   o n   t h e   p a g e   w h e r e   t h i s   c o m p o n e n t   w i l l   b e   d i s p l a y e d .   T h e   t e m p l a t e   p r o p e r t y   i s   a   s i m p l e   H T M L   t e m p l a t e   t h a t   i n c l u d e s   a   p l a c e h o l d e r   t h a t   c o r r e s p o n d s   t o   t h e   c o m p o n e n t s   n a m e   p r o p e r t y ,   d e f i n e d   o n   t h e   l a s t   l i n e .   B y   w o r k i n g   w i t h   c o m p o n e n t s   a n d   t e m p l a t e s ,   i n s t e a d   o f   D O M   e l e m e n t s ,   A n g u l a r   a p p s   c a n   o p e r a t e   a t   a   h i g h e r   l e v e l   o f   a b s t r a c t i o n   a n d   w i t h   l e s s   o v e r a l l   c o d e   t h a n   a p p s   w r i t t e n   u s i n g   j u s t   J a v a S c r i p t   ( a l s o   c a l l e d   v a n i l l a   J S )   o r   w i t h   j Q u e r y .   A n g u l a r   a l s o   i m p o s e s   s o m e   o r d e r   o n   h o w   y o u   o r g a n i z e   y o u r   c l i e n t - s i d e   s c r i p t   f i l e s .   B y   c o n v e n t i o n ,   A n g u l a r   a p p s   u s e   a   c o m m o n   f o l d e r   s t r u c t u r e ,   w i t h   m o d u l e   a n d   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 5         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s     c o m p o n e n t   s c r i p t   f i l e s   l o c a t e d   i n   a n   a p p   f o l d e r .   A n g u l a r   s c r i p t s   c o n c e r n e d   w i t h   b u i l d i n g ,   d e p l o y i n g ,   a n d   t e s t i n g   t h e   a p p   a r e   t y p i c a l l y   l o c a t e d   i n   a   h i g h e r - l e v e l   f o l d e r .   A n g u l a r   a l s o   m a k e s   g r e a t   u s e   o f   c o m m a n d   l i n e   i n t e r f a c e   ( C L I )   t o o l i n g .   G e t t i n g   s t a r t e d   w i t h   A n g u l a r   d e v e l o p m e n t   l o c a l l y   ( a s s u m i n g   y o u   a l r e a d y   h a v e   g i t   a n d   n p m   i n s t a l l e d )   c o n s i s t s   o f   s i m p l y   c l o n i n g   a   r e p o   f r o m   G i t H u b   a n d   r u n n i n g   ` n p m   i n s t a l l `   a n d   ` n p m   s t a r t ` .   B e y o n d   t h i s ,   A n g u l a r   s h i p s   i t s   o w n   C L I   t o o l   w h i c h   c a n   c r e a t e   p r o j e c t s ,   a d d   f i l e s ,   a n d   a s s i s t   w i t h   t e s t i n g ,   b u n d l i n g ,   a n d   d e p l o y m e n t   t a s k s .   T h i s   C L I   t o o l i n g   f r i e n d l i n e s s   m a k e s   A n g u l a r   e s p e c i a l l y   c o m p a t i b l e   w i t h   A S P . N E T   C o r e ,   w h i c h   a l s o   f e a t u r e s   g r e a t   C L I   s u p p o r t .   M i c r o s o f t   h a s   d e v e l o p e d   a   r e f e r e n c e   a p p l i c a t i o n ,   e S h o p O n C o n t a i n e r s ,   w h i c h   i n c l u d e s   a n   A n g u l a r   S P A   i m p l e m e n t a t i o n .   T h i s   a p p   i n c l u d e s   A n g u l a r   m o d u l e s   t o   m a n a g e   t h e   o n l i n e   s t o r e s   s h o p p i n g   b a s k e t ,   l o a d   a n d   d i s p l a y   i t e m s   f r o m   i t s   c a t a l o g ,   a n d   h a n d l e   o r d e r   c r e a t i o n .   Y o u   c a n   v i e w   a n d   d o w n l o a d   t h e   s a m p l e   a p p l i c a t i o n   f r o m   G i t H u b .     R e a c t   U n l i k e   A n g u l a r ,   w h i c h   o f f e r s   a   f u l l   M o d e l - V i e w - C o n t r o l l e r   p a t t e r n   i m p l e m e n t a t i o n ,   R e a c t   i s   o n l y   c o n c e r n e d   w i t h   v i e w s .   I t s   n o t   a   f r a m e w o r k ,   j u s t   a   l i b r a r y ,   s o   t o   b u i l d   a   S P A   y o u l l   n e e d   t o   l e v e r a g e   a d d i t i o n a l   l i b r a r i e s .     O n e   o f   R e a c t s   m o s t   i m p o r t a n t   f e a t u r e s   i s   i t s   u s e   o f   a   v i r t u a l   D O M .   T h e   v i r t u a l   D O M   p r o v i d e s   R e a c t   w i t h   s e v e r a l   a d v a n t a g e s ,   i n c l u d i n g   p e r f o r m a n c e   ( t h e   v i r t u a l   D O M   c a n   o p t i m i z e   w h i c h   p a r t s   o f   t h e   a c t u a l   D O M   n e e d   t o   b e   u p d a t e d )   a n d   t e s t a b i l i t y   ( n o   n e e d   t o   h a v e   a   b r o w s e r   t o   t e s t   R e a c t   a n d   i t s   i n t e r a c t i o n s   w i t h   i t s   v i r t u a l   D O M ) .   R e a c t   i s   a l s o   u n u s u a l   i n   h o w   i t   w o r k s   w i t h   H T M L .   R a t h e r   t h a n   h a v i n g   a   s t r i c t   s e p a r a t i o n   b e t w e e n   c o d e   a n d   m a r k u p   ( w i t h   r e f e r e n c e s   t o   J a v a S c r i p t   a p p e a r i n g   i n   H T M L   a t t r i b u t e s   p e r h a p s ) ,   R e a c t   a d d s   H T M L   d i r e c t l y   w i t h i n   i t s   J a v a S c r i p t   c o d e   a s   J S X .   J S X   i s   H T M L - l i k e   s y n t a x   t h a t   c a n   c o m p i l e   d o w n   t o   p u r e   J a v a S c r i p t .   F o r   e x a m p l e :   < u l >       {   a u t h o r s . m a p ( a u t h o r   = >             < l i   k e y = { a u t h o r . i d } > { a u t h o r . n a m e } < / l i >     ) }     < / u l >   I f   y o u   a l r e a d y   k n o w   J a v a S c r i p t ,   l e a r n i n g   R e a c t   s h o u l d   b e   e a s y .   T h e r e   i s n t   n e a r l y   a s   m u c h   l e a r n i n g   c u r v e   o r   s p e c i a l   s y n t a x   i n v o l v e d   a s   w i t h   A n g u l a r   o r   o t h e r   p o p u l a r   l i b r a r i e s .   B e c a u s e   R e a c t   i s n t   a   f u l l   f r a m e w o r k ,   y o u l l   t y p i c a l l y   w a n t   o t h e r   l i b r a r i e s   t o   h a n d l e   t h i n g s   l i k e   r o u t i n g ,   w e b   A P I   c a l l s ,   a n d   d e p e n d e n c y   m a n a g e m e n t .   T h e   n i c e   t h i n g   i s ,   y o u   c a n   p i c k   t h e   b e s t   l i b r a r y   f o r   e a c h   o f   t h e s e ,   b u t   t h e   d i s a d v a n t a g e   i s   t h a t   y o u   n e e d   t o   m a k e   a l l   o f   t h e s e   d e c i s i o n s   a n d   v e r i f y   a l l   o f   y o u r   c h o s e n   l i b r a r i e s   w o r k   w e l l   t o g e t h e r   w h e n   y o u r e   d o n e .   I f   y o u   w a n t   a   g o o d   s t a r t i n g   p o i n t ,   y o u   c a n   u s e   a   s t a r t e r   k i t   l i k e   R e a c t   S l i n g s h o t ,   w h i c h   p r e p a c k a g e s   a   s e t   o f   c o m p a t i b l e   l i b r a r i e s   t o g e t h e r   w i t h   R e a c t .   C h o o s i n g   a   S P A   F r a m e w o r k   W h e n   c o n s i d e r i n g   w h i c h   J a v a S c r i p t   f r a m e w o r k   w i l l   w o r k   b e s t   t o   s u p p o r t   y o u r   S P A ,   k e e p   i n   m i n d   t h e   f o l l o w i n g   c o n s i d e r a t i o n s :   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 6         C h a p t e r   6           C o m m o n   C l i e n t   S i d e   W e b   T e c h n o l o g i e s       I s   y o u r   t e a m   f a m i l i a r   w i t h   t h e   f r a m e w o r k   a n d   i t s   d e p e n d e n c i e s   ( i n c l u d i n g   T y p e S c r i p t   i n   s o m e   c a s e s ) ?     H o w   o p i n i o n a t e d   i s   t h e   f r a m e w o r k ,   a n d   d o   y o u   a g r e e   w i t h   i t s   d e f a u l t   w a y   o f   d o i n g   t h i n g s ?     D o e s   i t   ( o r   a   c o m p a n i o n   l i b r a r y )   i n c l u d e   a l l   t h e   f e a t u r e s   y o u r   a p p   r e q u i r e s ?     I s   i t   w e l l - d o c u m e n t e d ?     H o w   a c t i v e   i s   i t s   c o m m u n i t y ?   A r e   n e w   p r o j e c t s   b u i l d i n g   b u i l t   w i t h   i t ?     H o w   a c t i v e   i s   i t s   c o r e   t e a m ?   A r e   i s s u e s   b e i n g   r e s o l v e d   a n d   n e w   v e r s i o n s   s h i p p e d   r e g u l a r l y ?   J a v a S c r i p t   f r a m e w o r k s   c o n t i n u e   t o   e v o l v e   w i t h   b r e a k n e c k   s p e e d .   U s e   t h e   c o n s i d e r a t i o n s   l i s t e d   a b o v e   t o   h e l p   m i t i g a t e   t h e   r i s k   o f   c h o o s i n g   a   f r a m e w o r k   y o u l l   l a t e r   r e g r e t   b e i n g   d e p e n d e n t   u p o n .   I f   y o u r e   p a r t i c u l a r l y   r i s k - a v e r s e ,   c o n s i d e r   a   f r a m e w o r k   t h a t   o f f e r s   c o m m e r c i a l   s u p p o r t   a n d / o r   i s   b e i n g   d e v e l o p e d   b y   a   l a r g e   e n t e r p r i s e .     R e f e r e n c e s     C l i e n t   W e b   T e c h n o l o g i e s     H T M L   a n d   C S S   h t t p s : / / w w w . w 3 . o r g / s t a n d a r d s / w e b d e s i g n / h t m l c s s   S a s s   v s .   L E S S   h t t p s : / / w w w . k e y c d n . c o m / b l o g / s a s s - v s - l e s s /   S t y l i n g   A S P . N E T   C o r e   A p p s   w i t h   L E S S ,   S a s s ,   a n d   F o n t   A w e s o m e   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / c l i e n t - s i d e / l e s s - s a s s - f a     C l i e n t - S i d e   D e v e l o p m e n t   i n   A S P . N E T   C o r e   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / c l i e n t - s i d e /     j Q u e r y   h t t p s : / / j q u e r y . c o m /     j Q u e r y   v s   A n g u l a r J S   h t t p s : / / w w w . a i r p a i r . c o m / a n g u l a r j s / p o s t s / j q u e r y - a n g u l a r j s - c o m p a r i s o n - m i g r a t i o n - w a l k t h r o u g h     A n g u l a r   h t t p s : / / a n g u l a r . i o /     R e a c t   h t t p s : / / f a c e b o o k . g i t h u b . i o / r e a c t /     R e a c t   S l i n g s h o t   h t t p s : / / g i t h u b . c o m / c o r y h o u s e / r e a c t - s l i n g s h o t   R e a c t   v s   A n g u l a r   2   C o m p a r i s o n   h t t p s : / / w w w . c o d e m e n t o r . i o / c o d e m e n t o r t e a m / r e a c t - v s - a n g u l a r - 2 - c o m p a r i s o n - b e g i n n e r s - g u i d e - l v z 5 7 1 0 h a   5   B e s t   J a v a S c r i p t   F r a m e w o r k s   o f   2 0 1 7   h t t p s : / / h a c k e r n o o n . c o m / 5 - b e s t - j a v a s c r i p t - f r a m e w o r k s - i n - 2 0 1 7 - 7 a 6 3 b 3 8 7 0 2 8 2     Evaluation Warning: The document was created with Spire.PDF for .NET
      4 7         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s           S E C T I O N       7     D e v e l o p i n g   A S P . N E T   C o r e   A p p s   I t s   n o t   i m p o r t a n t   t o   g e t   i t   r i g h t   t h e   f i r s t   t i m e .   I t s   v i t a l l y   i m p o r t a n t   t o   g e t   i t   r i g h t   t h e   l a s t   t i m e .   A n d r e w   H u n t   a n d   D a v i d   T h o m a s     S u m m a r y   A S P . N E T   C o r e   i s   a   c r o s s - p l a t f o r m ,   o p e n - s o u r c e   f r a m e w o r k   f o r   b u i l d i n g   m o d e r n   c l o u d - o p t i m i z e d   w e b   a p p l i c a t i o n s .   A S P . N E T   C o r e   a p p s   a r e   l i g h t w e i g h t   a n d   m o d u l a r ,   w i t h   b u i l t - i n   s u p p o r t   f o r   d e p e n d e n c y   i n j e c t i o n ,   e n a b l i n g   g r e a t e r   t e s t a b i l i t y   a n d   m a i n t a i n a b i l i t y .   C o m b i n e d   w i t h   t h e   A S P . N E T   C o r e   M V C   f r a m e w o r k ,   w h i c h   s u p p o r t s   b u i l d i n g   m o d e r n   w e b   A P I s   i n   a d d i t i o n   t o   b o t h   v i e w - b a s e d   a n d   p a g e - b a s e d   a p p s ,   A S P . N E T   C o r e   i s   a   p o w e r f u l   f r a m e w o r k   w i t h   w h i c h   t o   b u i l d   e n t e r p r i s e   w e b   a p p l i c a t i o n s .   M V C   a n d   R a z o r   P a g e s   A S P . N E T   C o r e   M V C   o f f e r s   m a n y   f e a t u r e s   t h a t   a r e   u s e f u l   f o r   b u i l d i n g   w e b - b a s e d   A P I s   a n d   a p p s .   T h e   t e r m   M V C   s t a n d s   f o r   M o d e l - V i e w - C o n t r o l l e r ,   a   U I   p a t t e r n   t h a t   b r e a k s   u p   t h e   r e s p o n s i b i l i t i e s   o f   r e s p o n d i n g   t o   u s e r   r e q u e s t s   i n t o   s e v e r a l   p a r t s .   I n   a d d i t i o n   t o   f o l l o w i n g   t h i s   p a t t e r n ,   y o u   c a n   a l s o   i m p l e m e n t   f e a t u r e s   i n   y o u r   A S P . N E T   C o r e   a p p s   a s   R a z o r   P a g e s .   R a z o r   P a g e s   a r e   b u i l t   i n t o   A S P . N E T   C o r e   M V C ,   a n d   u s e   t h e   s a m e   f e a t u r e s   f o r   r o u t i n g ,   m o d e l   b i n d i n g ,   e t c .   H o w e v e r ,   i n s t e a d   o f   h a v i n g   s e p a r a t e   f o l d e r s   a n d   f i l e s   f o r   C o n t r o l l e r s ,   V i e w s ,   e t c .   a n d   u s i n g   a t t r i b u t e - b a s e d   r o u t i n g ,   R a z o r   P a g e s   a r e   p l a c e d   i n   a   s i n g l e   f o l d e r   ( / P a g e s ) ,   r o u t e   b a s e d   o n   t h e i r   r e l a t i v e   l o c a t i o n   i n   t h i s   f o l d e r ,   a n d   h a n d l e   r e q u e s t s   w i t h   h a n d l e r s   i n s t e a d   o f   c o n t r o l l e r   a c t i o n s .   W h e n   y o u   c r e a t e   a   n e w   A S P . N E T   C o r e   A p p ,   y o u   s h o u l d   h a v e   a   p l a n   i n   m i n d   f o r   t h e   k i n d   o f   a p p   y o u   w a n t   t o   b u i l d .   I n   V i s u a l   S t u d i o ,   y o u   w i l l   c h o o s e   f r o m   s e v e r a l   t e m p l a t e s   l i k e   t h o s e   s h o w n   i n   F i g u r e   7 - 1 .   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 8         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s       F i g u r e   7 - 1 .   A S P . N E T   C o r e   P r o j e c t   T e m p l a t e s   i n   V i s u a l   S t u d i o   T h e   t h r e e   m o s t   c o m m o n   p r o j e c t   t e m p l a t e s   a r e   W e b   A P I ,   W e b   A p p l i c a t i o n ,   a n d   W e b   A p p l i c a t i o n   ( M o d e l - V i e w - C o n t r o l l e r ) .   A l t h o u g h   y o u   c a n   o n l y   m a k e   t h i s   d e c i s i o n   w h e n   y o u   f i r s t   c r e a t e   a   p r o j e c t ,   i t s   n o t   a n   i r r e v o c a b l e   d e c i s i o n .   T h e   W e b   A P I   p r o j e c t   u s e s   s t a n d a r d   M o d e l - V i e w - C o n t r o l l e r   c o n t r o l l e r s     i t   j u s t   l a c k s   V i e w s   b y   d e f a u l t .   L i k e w i s e ,   t h e   d e f a u l t   W e b   A p p l i c a t i o n   t e m p l a t e   u s e s   R a z o r   P a g e s ,   a n d   s o   a l s o   l a c k s   a   V i e w s   f o l d e r .   Y o u   c a n   a d d   a   V i e w s   f o l d e r   t o   t h e s e   p r o j e c t s   l a t e r   t o   s u p p o r t   v i e w - b a s e d   b e h a v i o r .   N e i t h e r   t h e   W e b   A P I   n o r   t h e   M o d e l - V i e w - C o n t r o l l e r   p r o j e c t   i n c l u d e   a   P a g e s   f o l d e r   b y   d e f a u l t ,   b u t   y o u   c a n   a d d   o n e   l a t e r   t o   s u p p o r t   R a z o r   P a g e s - b a s e d   b e h a v i o r .   Y o u   c a n   t h i n k   o f   t h e s e   t h r e e   t e m p l a t e s   a s   s u p p o r t i n g   t h r e e   d i f f e r e n t   k i n d s   o f   d e f a u l t   u s e r   i n t e r a c t i o n :   d a t a   ( w e b   A P I ) ,   p a g e - b a s e d ,   a n d   v i e w - b a s e d .   H o w e v e r ,   y o u   c a n   m i x   a n d   m a t c h   a n y   o r   a l l   o f   t h e s e   w i t h i n   a   s i n g l e   p r o j e c t   i f   y o u   w i s h .   W h y   R a z o r   P a g e s ?   A s   y o u   s a w   i n   F i g u r e   7 - 1 ,   R a z o r   P a g e s   i s   n o w   t h e   d e f a u l t   a p p r o a c h   f o r   n e w   w e b   a p p l i c a t i o n s   i n   V i s u a l   S t u d i o .   R a z o r   P a g e s   o f f e r   a   s i g n i f i c a n t l y   s i m p l e r   m e a n s   o f   b u i l d i n g   p a g e - b a s e d   a p p l i c a t i o n   f e a t u r e s ,   s u c h   a s   n o n - S P A   f o r m s .   U s i n g   c o n t r o l l e r s   a n d   v i e w s ,   i t   w a s   c o m m o n   f o r   a p p l i c a t i o n s   t o   h a v e   v e r y   l a r g e   c o n t r o l l e r s   t h a t   w o r k e d   w i t h   m a n y   d i f f e r e n t   d e p e n d e n c i e s   a n d   v i e w   m o d e l s   a n d   r e t u r n e d   m a n y   d i f f e r e n t   v i e w s .   T h i s   r e s u l t e d   i n   a   l o t   o f   c o m p l e x i t y   a n d   o f t e n   r e s u l t e d   i n   c o n t r o l l e r s   t h a t   d i d n t   f o l l o w   t h e   S i n g l e   R e s p o n s i b i l i t y   P r i n c i p l e   o r   O p e n / C l o s e d   P r i n c i p l e s   e f f e c t i v e l y .   R a z o r   P a g e s   a d d r e s s e s   t h i s   i s s u e   b y   e n c a p s u l a t i n g   t h e   s e r v e r - s i d e   l o g i c   f o r   a   g i v e n   l o g i c a l   p a g e   i n   a   w e b   a p p l i c a t i o n   w i t h   i t s   R a z o r   m a r k u p .   A   R a z o r   P a g e   t h a t   h a s   n o   s e r v e r - s i d e   l o g i c   c a n   s i m p l y   c o n s i s t   o f   a   R a z o r   f i l e   ( f o r   i n s t a n c e ,   I n d e x . c s h t m l ) .   H o w e v e r ,   m o s t   n o n - t r i v i a l   R a z o r   P a g e s   w i l l   h a v e   a n   a s s o c i a t e d   p a g e   m o d e l   c l a s s ,   w h i c h   b y   c o n v e n t i o n   i s   n a m e d   t h e   s a m e   a s   t h e   R a z o r   f i l e   w i t h   a   . c s   e x t e n s i o n   ( f o r   e x a m p l e ,   I n d e x . c s h t m l . c s ) .   Evaluation Warning: The document was created with Spire.PDF for .NET
    4 9         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     A   R a z o r   P a g e s   p a g e   m o d e l   c o m b i n e s   t h e   r e s p o n s i b i l i t i e s   o f   a n   M V C   c o n t r o l l e r   a n d   a   v i e w m o d e l .   I n s t e a d   o f   h a n d l i n g   r e q u e s t s   w i t h   c o n t r o l l e r   a c t i o n   m e t h o d s ,   p a g e   m o d e l   h a n d l e r s   l i k e   O n G e t ( )   a r e   e x e c u t e d ,   r e n d e r i n g   t h e i r   a s s o c i a t e d   p a g e   b y   d e f a u l t .   R a z o r   p a g e s   s i m p l i f y   t h e   p r o c e s s   o f   b u i l d i n g   i n d i v i d u a l   p a g e s   i n   a n   A S P . N E T   C o r e   a p p ,   w h i l e   s t i l l   p r o v i d i n g   a l l   t h e   a r c h i t e c t u r a l   f e a t u r e s   o f   A S P . N E T   C o r e   M V C .   T h e y   a r e   a   g o o d   d e f a u l t   c h o i c e   f o r   n e w   p a g e - b a s e d   f u n c t i o n a l i t y .   W h e n   t o   u s e   M V C   I f   y o u r e   b u i l d i n g   w e b   A P I s ,   t h e   M V C   p a t t e r n   m a k e s   m o r e   s e n s e   t h a n   t r y i n g   t o   u s e   R a z o r   P a g e s .   I f   y o u r   p r o j e c t   w i l l   o n l y   e x p o s e   w e b   A P I   e n d p o i n t s ,   y o u   s h o u l d   i d e a l l y   s t a r t   f r o m   t h e   W e b   A P I   p r o j e c t   t e m p l a t e ,   b u t   o t h e r w i s e   i t s   e a s y   t o   a d d   c o n t r o l l e r s   a n d   a s s o c i a t e d   A P I   e n d p o i n t s   t o   a n y   A S P . N E T   C o r e   a p p .   Y o u   s h o u l d   a l s o   u s e   t h e   v i e w - b a s e d   M V C   a p p r o a c h   i f   y o u r e   m i g r a t i n g   a n   e x i s t i n g   a p p l i c a t i o n   f r o m   A S P . N E T   M V C   5   o r   e a r l i e r   t o   A S P . N E T   C o r e   M V C   a n d   y o u   w a n t   t o   d o   s o   w i t h   t h e   l e a s t   a m o u n t   o f   e f f o r t .   O n c e   y o u v e   m a d e   t h e   i n i t i a l   m i g r a t i o n ,   y o u   c a n   e v a l u a t e   w h e t h e r   i t   m a k e s   s e n s e   t o   a d o p t   R a z o r   P a g e s   f o r   n e w   f e a t u r e s   o r   e v e n   a s   a   w h o l e s a l e   m i g r a t i o n .   W h e t h e r   y o u   c h o o s e   t o   b u i l d   y o u r   w e b   a p p   u s i n g   R a z o r   P a g e s   o r   M V C   v i e w s ,   y o u r   a p p   w i l l   h a v e   s i m i l a r   p e r f o r m a n c e   a n d   w i l l   i n c l u d e   s u p p o r t   f o r   d e p e n d e n c y   i n j e c t i o n ,   f i l t e r s ,   m o d e l   b i n d i n g   a n d   v a l i d a t i o n ,   e t c .   M a p p i n g   R e q u e s t s   t o   R e s p o n s e s   A t   i t s   h e a r t ,   A S P . N E T   C o r e   a p p s   m a p   i n c o m i n g   r e q u e s t s   t o   o u t g o i n g   r e s p o n s e s .   A t   a   l o w   l e v e l ,   t h i s   i s   d o n e   w i t h   m i d d l e w a r e ,   a n d   s i m p l e   A S P . N E T   C o r e   a p p s   a n d   m i c r o s e r v i c e s   m a y   b e   c o m p r i s e d   s o l e l y   o f   c u s t o m   m i d d l e w a r e .   W h e n   u s i n g   A S P . N E T   C o r e   M V C ,   y o u   c a n   w o r k   a t   a   s o m e w h a t   h i g h e r   l e v e l ,   t h i n k i n g   i n   t e r m s   o f   p a g e s   a n d   h a n d l e r s   o r   r o u t e s ,   c o n t r o l l e r s ,   a n d   a c t i o n s .   E a c h   i n c o m i n g   r e q u e s t   i s   c o m p a r e d   w i t h   t h e   a p p l i c a t i o n s   r o u t i n g   t a b l e ,   a n d   i f   a   m a t c h i n g   r o u t e   i s   f o u n d ,   t h e   a s s o c i a t e d   p a g e   h a n d l e r   ( b e l o n g i n g   t o   a   R a z o r   P a g e )   o r   a c t i o n   m e t h o d   ( b e l o n g i n g   t o   a   c o n t r o l l e r )   i s   c a l l e d   t o   h a n d l e   t h e   r e q u e s t .   I f   n o   m a t c h i n g   r o u t e   i s   f o u n d ,   a n   e r r o r   h a n d l e r   ( i n   t h i s   c a s e ,   r e t u r n i n g   a   N o t F o u n d   r e s u l t )   i s   c a l l e d .     R a z o r   P a g e s   u s e   a   c o n v e n t i o n - b a s e d   r o u t i n g   s y s t e m   ( b a s e d   o n   t h e   f i l e s   l o c a t i o n   w i t h i n   t h e   P a g e s   f o l d e r )   a n d   H T T P   v e r b - s p e c i f i c   h a n d l e r   m e t h o d s .   F o r   e x a m p l e ,   a   p a g e   n a m e d   I n d e x . c s h t m l   l o c a t e d   i n   t h e   r o o t   o f   t h e   P a g e s   f o l d e r   w i l l   b e   r o u t e d   t o   t h e   r o o t   o f   t h e   w e b   a p p l i c a t i o n   ( / )   o r   t o   i t s   n a m e   ( / I n d e x ) .   A   p a g e   n a m e d   C u s t o m e r s . c s h t m l   w o u l d   r o u t e   t o   / C u s t o m e r s .   Y o u   c a n   s p e c i f y   c u s t o m   r o u t e s   f o r   R a z o r   P a g e s   w h e n   y o u   c o n f i g u r e   M V C   i n   S t a r t u p ,   i f   d e s i r e d .   A S P . N E T   C o r e   M V C   a p p s   c a n   u s e   c o n v e n t i o n a l   r o u t e s ,   a t t r i b u t e   r o u t e s ,   o r   b o t h .   C o n v e n t i o n a l   r o u t e s   a r e   d e f i n e d   i n   c o d e ,   s p e c i f y i n g   r o u t i n g   c o n v e n t i o n s   u s i n g   s y n t a x   l i k e   i n   t h e   e x a m p l e   b e l o w :   a p p . U s e M v c ( r o u t e s   = >   {   r o u t e s . M a p R o u t e ( " d e f a u l t " , " { c o n t r o l l e r = H o m e } / { a c t i o n = I n d e x } / { i d ? } " ) ;   } ) ;   I n   t h i s   e x a m p l e ,   a   r o u t e   n a m e d   d e f a u l t   h a s   b e e n   a d d e d   t o   t h e   r o u t i n g   t a b l e .   I t   d e f i n e s   a   r o u t e   t e m p l a t e   w i t h   p l a c e h o l d e r s   f o r   c o n t r o l l e r ,   a c t i o n ,   a n d   i d .   T h e   c o n t r o l l e r   a n d   a c t i o n   p l a c e h o l d e r s   h a v e   d e f a u l t   s p e c i f i e d   ( H o m e   a n d   I n d e x ,   r e s p e c t i v e l y ) ,   a n d   t h e   i d   p l a c e h o l d e r   i s   o p t i o n a l   ( b y   v i r t u e   o f   a   ?   a p p l i e d   t o   i t ) .   T h e   c o n v e n t i o n   d e f i n e d   h e r e   s t a t e s   t h a t   t h e   f i r s t   p a r t   o f   a   r e q u e s t   s h o u l d   c o r r e s p o n d   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 0         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     t o   t h e   n a m e   o f   t h e   c o n t r o l l e r ,   t h e   s e c o n d   p a r t   t o   t h e   a c t i o n ,   a n d   t h e n   i f   n e c e s s a r y   a   t h i r d   p a r t   w i l l   r e p r e s e n t   a n   i d   p a r a m e t e r .   C o n v e n t i o n a l   r o u t e s   a r e   t y p i c a l l y   d e f i n e d   i n   o n e   p l a c e   f o r   t h e   a p p l i c a t i o n ,   s u c h   a s   i n   t h e   C o n f i g u r e   m e t h o d   i n   t h e   S t a r t u p   c l a s s .   A t t r i b u t e   r o u t e s   a r e   a p p l i e d   t o   c o n t r o l l e r s   a n d   a c t i o n s   d i r e c t l y ,   r a t h e r   t h a n   s p e c i f i e d   g l o b a l l y .   T h i s   h a s   t h e   a d v a n t a g e   o f   m a k i n g   t h e m   m u c h   m o r e   d i s c o v e r a b l e   w h e n   y o u r e   l o o k i n g   a t   a   p a r t i c u l a r   m e t h o d ,   b u t   d o e s   m e a n   t h a t   r o u t i n g   i n f o r m a t i o n   i s   n o t   k e p t   i n   o n e   p l a c e   i n   t h e   a p p l i c a t i o n .   W i t h   a t t r i b u t e   r o u t e s ,   y o u   c a n   e a s i l y   s p e c i f y   m u l t i p l e   r o u t e s   f o r   a   g i v e n   a c t i o n ,   a s   w e l l   a s   c o m b i n e   r o u t e s   b e t w e e n   c o n t r o l l e r s   a n d   a c t i o n s .   F o r   e x a m p l e :   [ R o u t e ( " H o m e " ) ]   p u b l i c   c l a s s   H o m e C o n t r o l l e r   :   C o n t r o l l e r   {   [ R o u t e ( " " ) ]       / /   C o m b i n e s   t o   d e f i n e   t h e   r o u t e   t e m p l a t e   " H o m e "   [ R o u t e ( " I n d e x " ) ]   / /   C o m b i n e s   t o   d e f i n e   r o u t e   t e m p l a t e   " H o m e / I n d e x "   [ R o u t e ( " / " ) ]     / /   D o e s   n o t   c o m b i n e ,   d e f i n e s   t h e   r o u t e   t e m p l a t e   " "   p u b l i c   I A c t i o n R e s u l t   I n d e x ( )   { }   R o u t e s   c a n   b e   s p e c i f i e d   o n   [ H t t p G e t ]   a n d   s i m i l a r   a t t r i b u t e s ,   a v o i d i n g   t h e   n e e d   t o   a d d   s e p a r a t e   [ R o u t e ]   a t t r i b u t e s .   A t t r i b u t e   r o u t e s   c a n   a l s o   u s e   t o k e n s   t o   r e d u c e   t h e   n e e d   t o   r e p e a t   c o n t r o l l e r   o r   a c t i o n   n a m e s ,   a s   s h o w n   b e l o w :   [ R o u t e ( " [ c o n t r o l l e r ] " ) ]   p u b l i c   c l a s s   P r o d u c t s C o n t r o l l e r   :   C o n t r o l l e r   {         [ R o u t e ( " " ) ]           / /   M a t c h e s   ' P r o d u c t s '         [ R o u t e ( " I n d e x " ) ]   / /   M a t c h e s   ' P r o d u c t s / I n d e x '         p u b l i c   I A c t i o n R e s u l t   I n d e x ( )   }   R a z o r   P a g e s   d o n t   u s e   a t t r i b u t e   r o u t i n g .   Y o u   c a n   s p e c i f y   a d d i t i o n a l   r o u t e   t e m p l a t e   i n f o r m a t i o n   f o r   a   R a z o r   P a g e   a s   p a r t   o f   i t s   @ p a g e   d i r e c t i v e :   @ p a g e   { i d : i n t }   I n   t h e   a b o v e   e x a m p l e ,   t h e   p a g e   i n   q u e s t i o n   w o u l d   m a t c h   a   r o u t e   w i t h   a n   i n t e g e r   i d   p a r a m e t e r .   F o r   e x a m p l e :   / P r o d u c t s / 1 2 3   O n c e   a   g i v e n   r e q u e s t   h a s   b e e n   m a t c h e d   t o   a   r o u t e ,   b u t   b e f o r e   t h e   a c t i o n   m e t h o d   ( o r   h a n d l e r )   i s   c a l l e d ,   A S P . N E T   C o r e   M V C   w i l l   p e r f o r m   m o d e l   b i n d i n g   a n d   m o d e l   v a l i d a t i o n   o n   t h e   r e q u e s t .   M o d e l   b i n d i n g   i s   r e s p o n s i b l e   f o r   c o n v e r t i n g   i n c o m i n g   H T T P   d a t a   i n t o   t h e   . N E T   t y p e s   s p e c i f i e d   a s   p a r a m e t e r s   o f   t h e   a c t i o n   m e t h o d   t o   b e   c a l l e d .   F o r   e x a m p l e ,   i f   t h e   a c t i o n   m e t h o d   e x p e c t s   a n   i n t   i d   p a r a m e t e r ,   m o d e l   b i n d i n g   w i l l   a t t e m p t   t o   p r o v i d e   t h i s   p a r a m e t e r   f r o m   a   v a l u e   p r o v i d e d   a s   p a r t   o f   t h e   r e q u e s t .   T o   d o   s o ,   m o d e l   b i n d i n g   l o o k s   f o r   v a l u e s   i n   a   p o s t e d   f o r m ,   v a l u e s   i n   t h e   r o u t e   i t s e l f ,   a n d   q u e r y   s t r i n g   v a l u e s .   A s s u m i n g   a n   i d   v a l u e   i s   f o u n d ,   i t   w i l l   b e   c o n v e r t e d   t o   a n   i n t e g e r   b e f o r e   b e i n g   p a s s e d   i n t o   t h e   a c t i o n   m e t h o d .   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 1         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     A f t e r   b i n d i n g   t h e   m o d e l   b u t   b e f o r e   c a l l i n g   t h e   a c t i o n   m e t h o d ,   m o d e l   v a l i d a t i o n   o c c u r s .   M o d e l   v a l i d a t i o n   u s e s   o p t i o n a l   a t t r i b u t e s   o n   t h e   m o d e l   t y p e ,   a n d   c a n   h e l p   e n s u r e   t h a t   t h e   p r o v i d e d   m o d e l   o b j e c t   c o n f o r m s   t o   c e r t a i n   d a t a   r e q u i r e m e n t s .   C e r t a i n   v a l u e s   m a y   b e   s p e c i f i e d   a s   r e q u i r e d ,   o r   l i m i t e d   t o   a   c e r t a i n   l e n g t h   o r   n u m e r i c   r a n g e ,   e t c .   I f   v a l i d a t i o n   a t t r i b u t e s   a r e   s p e c i f i e d   b u t   t h e   m o d e l   d o e s   n o t   c o n f o r m   t o   t h e i r   r e q u i r e m e n t s ,   t h e   p r o p e r t y   M o d e l S t a t e . I s V a l i d   w i l l   b e   f a l s e ,   a n d   t h e   s e t   o f   f a i l i n g   v a l i d a t i o n   r u l e s   w i l l   b e   a v a i l a b l e   t o   s e n d   t o   t h e   c l i e n t   m a k i n g   t h e   r e q u e s t .   I f   y o u   a r e   u s i n g   m o d e l   v a l i d a t i o n ,   y o u   s h o u l d   b e   s u r e   t o   a l w a y s   c h e c k   t h a t   t h e   m o d e l   i s   v a l i d   b e f o r e   p e r f o r m i n g   a n y   s t a t e - a l t e r i n g   c o m m a n d s ,   t o   e n s u r e   y o u r   a p p   i s   n o t   c o r r u p t e d   b y   i n v a l i d   d a t a .   Y o u   c a n   u s e   a   f i l t e r   t o   a v o i d   t h e   n e e d   t o   a d d   c o d e   f o r   t h i s   i n   e v e r y   a c t i o n .   A S P . N E T   C o r e   M V C   f i l t e r s   o f f e r   a   w a y   o f   i n t e r c e p t i n g   g r o u p s   o f   r e q u e s t s ,   s o   t h a t   c o m m o n   p o l i c i e s   a n d   c r o s s - c u t t i n g   c o n c e r n s   c a n   b e   a p p l i e d   o n   a   t a r g e t e d   b a s i s .   F i l t e r s   c a n   b e   a p p l i e d   t o   i n d i v i d u a l   a c t i o n s ,   w h o l e   c o n t r o l l e r s ,   o r   g l o b a l l y   f o r   a n   a p p l i c a t i o n .   F o r   w e b   A P I s ,   A S P . N E T   C o r e   M V C   s u p p o r t s   c o n t e n t   n e g o t i a t i o n ,   a l l o w i n g   r e q u e s t s   t o   s p e c i f y   h o w   r e s p o n s e s   s h o u l d   b e   f o r m a t t e d .   B a s e d   o n   h e a d e r s   p r o v i d e d   i n   t h e   r e q u e s t ,   a c t i o n s   r e t u r n i n g   d a t a   w i l l   f o r m a t   t h e   r e s p o n s e   i n   X M L ,   J S O N ,   o r   a n o t h e r   s u p p o r t e d   f o r m a t .   T h i s   f e a t u r e   e n a b l e s   t h e   s a m e   A P I   t o   b e   u s e d   b y   m u l t i p l e   c l i e n t s   w i t h   d i f f e r e n t   d a t a   f o r m a t   r e q u i r e m e n t s .   R e f e r e n c e s     M a p p i n g   R e q u e s t s   t o   R e s p o n s e s     R o u t i n g   t o   C o n t r o l l e r   A c t i o n s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / c o n t r o l l e r s / r o u t i n g   M o d e l   B i n d i n g   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / m o d e l s / m o d e l - b i n d i n g   M o d e l   V a l i d a t i o n   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / m o d e l s / v a l i d a t i o n   F i l t e r s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / c o n t r o l l e r s / f i l t e r s       W o r k i n g   w i t h   D e p e n d e n c i e s   A S P . N E T   C o r e   h a s   b u i l t - i n   s u p p o r t   f o r   a n d   i n t e r n a l l y   m a k e s   u s e   o f   a   t e c h n i q u e   k n o w n   a s   d e p e n d e n c y   i n j e c t i o n .   D e p e n d e n c y   i n j e c t i o n   i s   a   t e c h n i q u e   t h a t   e n a b l e s   l o o s e   c o u p l i n g   b e t w e e n   d i f f e r e n t   p a r t s   o f   a n   a p p l i c a t i o n .   L o o s e r   c o u p l i n g   i s   d e s i r a b l e   b e c a u s e   i t   m a k e s   i t   e a s i e r   t o   i s o l a t e   p a r t s   o f   t h e   a p p l i c a t i o n ,   a l l o w i n g   f o r   t e s t i n g   o r   r e p l a c e m e n t .   I t   a l s o   m a k e s   i t   l e s s   l i k e l y   t h a t   a   c h a n g e   i n   o n e   p a r t   o f   t h e   a p p l i c a t i o n   w i l l   h a v e   a n   u n e x p e c t e d   i m p a c t   s o m e w h e r e   e l s e   i n   t h e   a p p l i c a t i o n .   D e p e n d e n c y   i n j e c t i o n   i s   b a s e d   o n   t h e   d e p e n d e n c y   i n v e r s i o n   p r i n c i p l e ,   a n d   i s   o f t e n   k e y   t o   a c h i e v i n g   t h e   o p e n / c l o s e d   p r i n c i p l e .   W h e n   e v a l u a t i n g   h o w   y o u r   a p p l i c a t i o n   w o r k s   w i t h   i t s   d e p e n d e n c i e s ,   b e w a r e   o f   t h e   s t a t i c   c l i n g   c o d e   s m e l l ,   a n d   r e m e m b e r   t h e   a p h o r i s m   n e w   i s   g l u e .   S t a t i c   c l i n g   o c c u r s   w h e n   y o u r   c l a s s e s   m a k e   c a l l s   t o   s t a t i c   m e t h o d s ,   o r   a c c e s s   s t a t i c   p r o p e r t i e s ,   w h i c h   h a v e   s i d e   e f f e c t s   o r   d e p e n d e n c i e s   o n   i n f r a s t r u c t u r e .   F o r   e x a m p l e ,   i f   y o u   h a v e   a   m e t h o d   t h a t   c a l l s   a   s t a t i c   m e t h o d ,   w h i c h   i n   t u r n   w r i t e s   t o   a   d a t a b a s e ,   y o u r   m e t h o d   i s   t i g h t l y   c o u p l e d   t o   t h e   d a t a b a s e .   A n y t h i n g   t h a t   b r e a k s   t h a t   d a t a b a s e   c a l l   w i l l   b r e a k   y o u r   m e t h o d .   T e s t i n g   s u c h   m e t h o d s   i s   n o t o r i o u s l y   d i f f i c u l t ,   s i n c e   s u c h   t e s t s   e i t h e r   r e q u i r e   c o m m e r c i a l   m o c k i n g   l i b r a r i e s   t o   m o c k   t h e   s t a t i c   c a l l s ,   o r   c a n   o n l y   b e   t e s t e d   w i t h   a   t e s t   d a t a b a s e   i n   p l a c e .   S t a t i c   c a l l s   t h a t   d o n t   h a v e   a n y   d e p e n d e n c e   o n   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 2         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     i n f r a s t r u c t u r e ,   e s p e c i a l l y   t h o s e   t h a t   a r e   c o m p l e t e l y   s t a t e l e s s ,   a r e   f i n e   t o   c a l l   a n d   h a v e   n o   i m p a c t   o n   c o u p l i n g   o r   t e s t a b i l i t y   ( b e y o n d   c o u p l i n g   c o d e   t o   t h e   s t a t i c   c a l l   i t s e l f ) .   M a n y   d e v e l o p e r s   u n d e r s t a n d   t h e   r i s k s   o f   s t a t i c   c l i n g   a n d   g l o b a l   s t a t e   b u t   w i l l   s t i l l   t i g h t l y   c o u p l e   t h e i r   c o d e   t o   s p e c i f i c   i m p l e m e n t a t i o n s   t h r o u g h   d i r e c t   i n s t a n t i a t i o n .   N e w   i s   g l u e   i s   m e a n t   t o   b e   a   r e m i n d e r   o f   t h i s   c o u p l i n g ,   a n d   n o t   a   g e n e r a l   c o n d e m n a t i o n   o f   t h e   u s e   o f   t h e   n e w   k e y w o r d .   J u s t   a s   w i t h   s t a t i c   m e t h o d   c a l l s ,   n e w   i n s t a n c e s   o f   t y p e s   t h a t   h a v e   n o   e x t e r n a l   d e p e n d e n c i e s   t y p i c a l l y   d o   n o t   t i g h t l y   c o u p l e   c o d e   t o   i m p l e m e n t a t i o n   d e t a i l s   o r   m a k e   t e s t i n g   m o r e   d i f f i c u l t .   B u t   e a c h   t i m e   a   c l a s s   i s   i n s t a n t i a t e d ,   t a k e   j u s t   a   b r i e f   m o m e n t   t o   c o n s i d e r   w h e t h e r   i t   m a k e s   s e n s e   t o   h a r d - c o d e   t h a t   s p e c i f i c   i n s t a n c e   i n   t h a t   p a r t i c u l a r   l o c a t i o n ,   o r   i f   i t   w o u l d   b e   a   b e t t e r   d e s i g n   t o   r e q u e s t   t h a t   i n s t a n c e   a s   a   d e p e n d e n c y .     Evaluation Warning: The document was created with Spire.PDF for .NET
    5 3         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     D e c l a r e   Y o u r   D e p e n d e n c i e s   A S P . N E T   C o r e   i s   b u i l t   a r o u n d   h a v i n g   m e t h o d s   a n d   c l a s s e s   d e c l a r e   t h e i r   d e p e n d e n c i e s ,   r e q u e s t i n g   t h e m   a s   a r g u m e n t s .   A S P . N E T   a p p l i c a t i o n s   a r e   t y p i c a l l y   s e t   u p   i n   a   S t a r t u p   c l a s s ,   w h i c h   i t s e l f   i s   c o n f i g u r e d   t o   s u p p o r t   d e p e n d e n c y   i n j e c t i o n   a t   s e v e r a l   p o i n t s .   I f   y o u r   S t a r t u p   c l a s s   h a s   a   c o n s t r u c t o r ,   i t   c a n   r e q u e s t   d e p e n d e n c i e s   t h r o u g h   t h e   c o n s t r u c t o r ,   l i k e   s o :   p u b l i c   c l a s s   S t a r t u p   / /   A S P . N E T   C o r e   1 . x   t e m p l a t e   {       p u b l i c   S t a r t u p ( I H o s t i n g E n v i r o n m e n t   e n v )       {           v a r   b u i l d e r   =   n e w   C o n f i g u r a t i o n B u i l d e r ( )               . S e t B a s e P a t h ( e n v . C o n t e n t R o o t P a t h )               . A d d J s o n F i l e ( " a p p s e t t i n g s . j s o n " ,   o p t i o n a l :   f a l s e ,   r e l o a d O n C h a n g e :   t r u e )               . A d d J s o n F i l e ( $ " a p p s e t t i n g s . { e n v . E n v i r o n m e n t N a m e } . j s o n " ,   o p t i o n a l :   t r u e ) ;           / /   a d d i t i o n a l   c o d e   o m i t t e d       }   }   T h e   S t a r t u p   c l a s s   i s   i n t e r e s t i n g   i n   t h a t   t h e r e   a r e   n o   e x p l i c i t   t y p e   r e q u i r e m e n t s   f o r   i t .   I t   d o e s n t   i n h e r i t   f r o m   a   s p e c i a l   S t a r t u p   b a s e   c l a s s ,   n o r   d o e s   i t   i m p l e m e n t   a n y   p a r t i c u l a r   i n t e r f a c e .   Y o u   c a n   g i v e   i t   a   c o n s t r u c t o r ,   o r   n o t ,   a n d   y o u   c a n   s p e c i f y   a s   m a n y   p a r a m e t e r s   o n   t h e   c o n s t r u c t o r   a s   y o u   w a n t .   W h e n   t h e   w e b   h o s t   y o u v e   c o n f i g u r e d   f o r   y o u r   a p p l i c a t i o n   s t a r t s ,   i t   w i l l   c a l l   t h e   S t a r t u p   c l a s s   y o u v e   t o l d   i t   t o   u s e ,   a n d   w i l l   u s e   d e p e n d e n c y   i n j e c t i o n   t o   p o p u l a t e   a n y   d e p e n d e n c i e s   t h e   S t a r t u p   c l a s s   r e q u i r e s .   O f   c o u r s e ,   i f   y o u   r e q u e s t   p a r a m e t e r s   t h a t   a r e n t   c o n f i g u r e d   i n   t h e   s e r v i c e s   c o n t a i n e r   u s e d   b y   A S P . N E T   C o r e ,   y o u l l   g e t   a n   e x c e p t i o n ,   b u t   i f   y o u   s t i c k   t o   d e p e n d e n c i e s   t h e   c o n t a i n e r   k n o w s   a b o u t ,   y o u   c a n   r e q u e s t   a n y t h i n g   y o u   w a n t .   I n   A S P . N E T   C o r e   2 . 0 ,   c o n f i g u r a t i o n   d e f a u l t s   a r e   t y p i c a l l y   s e t   i n   P r o g r a m . c s   a n d   t h e n   p a s s e d   i n t o   t h e   S t a r t u p   c l a s s .   T h u s ,   t h e   S t a r t u p   c l a s s   i n   t h e   d e f a u l t   t e m p l a t e s   l o o k s   l i k e   t h i s :   p u b l i c   c l a s s   S t a r t u p   / /   A S P . N E T   C o r e   2 . x   t e m p l a t e   {       p u b l i c   S t a r t u p ( I C o n f i g u r a t i o n   c o n f i g u r a t i o n )       {             C o n f i g u r a t i o n   =   c o n f i g u r a t i o n ;       }   }   D e p e n d e n c y   i n j e c t i o n   i s   b u i l t   i n t o   y o u r   A S P . N E T   C o r e   a p p s   r i g h t   f r o m   t h e   s t a r t ,   w h e n   y o u   c r e a t e   t h e   S t a r t u p   i n s t a n c e .   I t   d o e s n t   s t o p   t h e r e   f o r   t h e   S t a r t u p   c l a s s .   Y o u   c a n   a l s o   r e q u e s t   d e p e n d e n c i e s   i n   t h e   C o n f i g u r e   m e t h o d :   p u b l i c   v o i d   C o n f i g u r e ( I A p p l i c a t i o n B u i l d e r   a p p ,             I H o s t i n g E n v i r o n m e n t   e n v ,     Evaluation Warning: The document was created with Spire.PDF for .NET
    5 4         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s             I L o g g e r F a c t o r y   l o g g e r F a c t o r y )   {     / /   c o d e   o m i t t e d   }   T h e   C o n f i g u r e S e r v i c e s   m e t h o d   i s   t h e   e x c e p t i o n   t o   t h i s   b e h a v i o r ;   i t   m u s t   t a k e   j u s t   o n e   p a r a m e t e r   o f   t y p e   I S e r v i c e C o l l e c t i o n .   I t   d o e s n t   r e a l l y   n e e d   t o   s u p p o r t   d e p e n d e n c y   i n j e c t i o n ,   s i n c e   o n   t h e   o n e   h a n d   i t   i s   r e s p o n s i b l e   f o r   a d d i n g   o b j e c t s   t o   t h e   s e r v i c e s   c o n t a i n e r ,   a n d   o n   t h e   o t h e r   i t   h a s   a c c e s s   t o   a l l   c u r r e n t l y   c o n f i g u r e d   s e r v i c e s   v i a   t h e   I S e r v i c e C o l l e c t i o n   p a r a m e t e r .   T h u s ,   y o u   c a n   w o r k   w i t h   d e p e n d e n c i e s   d e f i n e d   i n   t h e   A S P . N E T   C o r e   s e r v i c e s   c o l l e c t i o n   i n   e v e r y   p a r t   o f   t h e   S t a r t u p   c l a s s ,   e i t h e r   b y   r e q u e s t i n g   t h e   n e e d e d   s e r v i c e   a s   a   p a r a m e t e r   o r   b y   w o r k i n g   w i t h   t h e   I S e r v i c e C o l l e c t i o n   i n   C o n f i g u r e S e r v i c e s .   N o t e :   I f   y o u   n e e d   t o   e n s u r e   c e r t a i n   s e r v i c e s   a r e   a v a i l a b l e   t o   y o u r   S t a r t u p   c l a s s ,   y o u   c a n   c o n f i g u r e   t h e m   u s i n g   W e b H o s t B u i l d e r   a n d   i t s   C o n f i g u r e S e r v i c e s   m e t h o d .   T h e   S t a r t u p   c l a s s   i s   a   m o d e l   f o r   h o w   y o u   s h o u l d   s t r u c t u r e   o t h e r   p a r t s   o f   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n ,   f r o m   C o n t r o l l e r s   t o   M i d d l e w a r e   t o   F i l t e r s   t o   y o u r   o w n   S e r v i c e s .   I n   e a c h   c a s e ,   y o u   s h o u l d   f o l l o w   t h e   E x p l i c i t   D e p e n d e n c i e s   P r i n c i p l e ,   r e q u e s t i n g   y o u r   d e p e n d e n c i e s   r a t h e r   t h a n   d i r e c t l y   c r e a t i n g   t h e m ,   a n d   l e v e r a g i n g   d e p e n d e n c y   i n j e c t i o n   t h r o u g h o u t   y o u r   a p p l i c a t i o n .   B e   c a r e f u l   o f   w h e r e   a n d   h o w   y o u   d i r e c t l y   i n s t a n t i a t e   i m p l e m e n t a t i o n s ,   e s p e c i a l l y   s e r v i c e s   a n d   o b j e c t s   t h a t   w o r k   w i t h   i n f r a s t r u c t u r e   o r   h a v e   s i d e   e f f e c t s .   P r e f e r   w o r k i n g   w i t h   a b s t r a c t i o n s   d e f i n e d   i n   y o u r   a p p l i c a t i o n   c o r e   a n d   p a s s e d   i n   a s   a r g u m e n t s   t o   h a r d c o d i n g   r e f e r e n c e s   t o   s p e c i f i c   i m p l e m e n t a t i o n   t y p e s .   S t r u c t u r i n g   t h e   A p p l i c a t i o n   M o n o l i t h i c   a p p l i c a t i o n s   t y p i c a l l y   h a v e   a   s i n g l e   e n t r y   p o i n t .   I n   t h e   c a s e   o f   a n   A S P . N E T   C o r e   w e b   a p p l i c a t i o n ,   t h e   e n t r y   p o i n t   w i l l   b e   t h e   A S P . N E T   C o r e   w e b   p r o j e c t .   H o w e v e r ,   t h a t   d o e s n t   m e a n   t h e   s o l u t i o n   s h o u l d   c o n s i s t   o f   j u s t   a   s i n g l e   p r o j e c t .   I t s   u s e f u l   t o   b r e a k   u p   t h e   a p p l i c a t i o n   i n t o   d i f f e r e n t   l a y e r s   t o   f o l l o w   s e p a r a t i o n   o f   c o n c e r n s .   O n c e   b r o k e n   u p   i n t o   l a y e r s ,   i t s   h e l p f u l   t o   g o   b e y o n d   f o l d e r s   t o   s e p a r a t e   p r o j e c t s ,   w h i c h   c a n   h e l p   a c h i e v e   b e t t e r   e n c a p s u l a t i o n .   T h e   b e s t   a p p r o a c h   t o   a c h i e v e   t h e s e   g o a l s   w i t h   a n   A S P . N E T   C o r e   a p p l i c a t i o n   i s   a   v a r i a t i o n   o f   t h e   C l e a n   A r c h i t e c t u r e   d i s c u s s e d   i n   c h a p t e r   5 .   F o l l o w i n g   t h i s   a p p r o a c h ,   t h e   a p p l i c a t i o n s   s o l u t i o n   w i l l   b e   c o m p r i s e d   o f   s e p a r a t e   l i b r a r i e s   f o r   t h e   U I ,   I n f r a s t r u c t u r e ,   a n d   A p p l i c a t i o n C o r e .     I n   a d d i t i o n   t o   t h e s e   p r o j e c t s ,   s e p a r a t e   t e s t   p r o j e c t s   a r e   i n c l u d e d   a s   w e l l   ( T e s t i n g   i s   d i s c u s s e d   i n   C h a p t e r   9 ) .   T h e   a p p l i c a t i o n s   o b j e c t   m o d e l   a n d   i n t e r f a c e s   s h o u l d   b e   p l a c e d   i n   t h e   A p p l i c a t i o n C o r e   p r o j e c t .   T h i s   p r o j e c t   w i l l   h a v e   a s   f e w   d e p e n d e n c i e s   a s   p o s s i b l e ,   a n d   t h e   o t h e r   p r o j e c t s   i n   t h e   s o l u t i o n   w i l l   r e f e r e n c e   i t .   B u s i n e s s   e n t i t i e s   t h a t   n e e d   t o   b e   p e r s i s t e d   a r e   d e f i n e d   i n   t h e   A p p l i c a t i o n C o r e   p r o j e c t ,   a s   a r e   s e r v i c e s   t h a t   d o   n o t   d i r e c t l y   d e p e n d   o n   i n f r a s t r u c t u r e .   I m p l e m e n t a t i o n   d e t a i l s ,   s u c h   a s   h o w   p e r s i s t e n c e   i s   p e r f o r m e d   o r   h o w   n o t i f i c a t i o n s   m i g h t   b e   s e n t   t o   a   u s e r ,   a r e   k e p t   i n   t h e   I n f r a s t r u c t u r e   p r o j e c t .   T h i s   p r o j e c t   w i l l   r e f e r e n c e   i m p l e m e n t a t i o n - s p e c i f i c   p a c k a g e s   s u c h   a s   E n t i t y   F r a m e w o r k   C o r e ,   b u t   s h o u l d   n o t   e x p o s e   d e t a i l s   a b o u t   t h e s e   i m p l e m e n t a t i o n s   o u t s i d e   o f   t h e   p r o j e c t .   I n f r a s t r u c t u r e   s e r v i c e s   a n d   r e p o s i t o r i e s   s h o u l d   i m p l e m e n t   i n t e r f a c e s   t h a t   a r e   d e f i n e d   i n   t h e   A p p l i c a t i o n C o r e   p r o j e c t ,   a n d   i t s   p e r s i s t e n c e   i m p l e m e n t a t i o n s   a r e   r e s p o n s i b l e   f o r   r e t r i e v i n g   a n d   s t o r i n g   e n t i t i e s   d e f i n e d   i n   A p p l i c a t i o n C o r e .   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 5         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     T h e   A S P . N E T   C o r e   U I   p r o j e c t   i s   r e s p o n s i b l e   f o r   a n y   U I   l e v e l   c o n c e r n s ,   b u t   s h o u l d   n o t   i n c l u d e   b u s i n e s s   l o g i c   o r   i n f r a s t r u c t u r e   d e t a i l s .   I n   f a c t ,   i d e a l l y   i t   s h o u l d n t   e v e n   h a v e   a   d e p e n d e n c y   o n   t h e   I n f r a s t r u c t u r e   p r o j e c t ,   w h i c h   w i l l   h e l p   e n s u r e   n o   d e p e n d e n c y   b e t w e e n   t h e   t w o   p r o j e c t s   i s   i n t r o d u c e d   a c c i d e n t a l l y .   T h i s   c a n   b e   a c h i e v e d   u s i n g   a   t h i r d - p a r t y   D I   c o n t a i n e r   l i k e   S t r u c t u r e M a p ,   w h i c h   a l l o w s   y o u   t o   d e f i n e   D I   r u l e s   i n   R e g i s t r y   c l a s s e s   i n   e a c h   p r o j e c t .   A n o t h e r   a p p r o a c h   t o   d e c o u p l i n g   t h e   a p p l i c a t i o n   f r o m   i m p l e m e n t a t i o n   d e t a i l s   i s   t o   h a v e   t h e   a p p l i c a t i o n   c a l l   m i c r o s e r v i c e s ,   p e r h a p s   d e p l o y e d   i n   i n d i v i d u a l   D o c k e r   c o n t a i n e r s .   T h i s   p r o v i d e s   e v e n   g r e a t e r   s e p a r a t i o n   o f   c o n c e r n s   a n d   d e c o u p l i n g   t h a n   l e v e r a g i n g   D I   b e t w e e n   t w o   p r o j e c t s ,   b u t   h a s   a d d i t i o n a l   c o m p l e x i t y .   F e a t u r e   O r g a n i z a t i o n   B y   d e f a u l t ,   v i e w - b a s e d   A S P . N E T   C o r e   M V C   a p p l i c a t i o n s   o r g a n i z e   t h e i r   f o l d e r   s t r u c t u r e   t o   i n c l u d e   C o n t r o l l e r s   a n d   V i e w s ,   a n d   f r e q u e n t l y   V i e w M o d e l s   ( s e e   b e l o w   f o r   R a z o r   P a g e s   o r g a n i z a t i o n ) .   C l i e n t - s i d e   c o d e   t o   s u p p o r t   t h e s e   s e r v e r - s i d e   s t r u c t u r e s   i s   t y p i c a l l y   s t o r e d   s e p a r a t e l y   i n   t h e   w w w r o o t   f o l d e r .   H o w e v e r ,   l a r g e   a p p l i c a t i o n s   m a y   e n c o u n t e r   p r o b l e m s   w i t h   t h i s   o r g a n i z a t i o n ,   s i n c e   w o r k i n g   o n   a n y   g i v e n   f e a t u r e   o f t e n   r e q u i r e s   j u m p i n g   b e t w e e n   t h e s e   f o l d e r s .   T h i s   g e t s   m o r e   a n d   m o r e   d i f f i c u l t   a s   t h e   n u m b e r   o f   f i l e s   a n d   s u b f o l d e r s   i n   e a c h   f o l d e r   g r o w s ,   r e s u l t i n g   i n   a   g r e a t   d e a l   o f   s c r o l l i n g   t h r o u g h   S o l u t i o n   E x p l o r e r .   O n e   s o l u t i o n   t o   t h i s   p r o b l e m   i s   t o   o r g a n i z e   a p p l i c a t i o n   c o d e   b y   f e a t u r e   i n s t e a d   o f   b y   f i l e   t y p e .   T h i s   o r g a n i z a t i o n a l   s t y l e   i s   t y p i c a l l y   r e f e r r e d   t o   a s   f e a t u r e   f o l d e r s   o r   f e a t u r e   s l i c e s   ( s e e   a l s o :   V e r t i c a l   S l i c e s ) .   A S P . N E T   C o r e   M V C   s u p p o r t s   A r e a s   f o r   t h i s   p u r p o s e .   U s i n g   a r e a s ,   y o u   c a n   c r e a t e   s e p a r a t e   s e t s   o f   C o n t r o l l e r s   a n d   V i e w s   f o l d e r s   ( a s   w e l l   a s   a n y   a s s o c i a t e d   m o d e l s )   i n   e a c h   A r e a   f o l d e r .   F i g u r e   7 - 2   s h o w s   a n   e x a m p l e   f o l d e r   s t r u c t u r e ,   u s i n g   A r e a s .     F i g u r e   7 - 2   S a m p l e   A r e a   O r g a n i z a t i o n   W h e n   u s i n g   A r e a s ,   y o u   m u s t   u s e   a t t r i b u t e s   t o   d e c o r a t e   y o u r   c o n t r o l l e r s   w i t h   t h e   n a m e   o f   t h e   a r e a   t o   w h i c h   t h e y   b e l o n g :   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 6         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     [ A r e a ( C a t a l o g ) ]   p u b l i c   c l a s s   H o m e C o n t r o l l e r   { }   Y o u   a l s o   n e e d   t o   a d d   a r e a   s u p p o r t   t o   y o u r   r o u t e s :     a p p . U s e M v c ( r o u t e s   = >   {       / /   A r e a s   s u p p o r t       r o u t e s . M a p R o u t e (           n a m e :   " a r e a R o u t e " ,           t e m p l a t e :   " { a r e a : e x i s t s } / { c o n t r o l l e r = H o m e } / { a c t i o n = I n d e x } / { i d ? } " ) ;       r o u t e s . M a p R o u t e (           n a m e :   " d e f a u l t " ,           t e m p l a t e :   " { c o n t r o l l e r = H o m e } / { a c t i o n = I n d e x } / { i d ? } " ) ;   } ) ;   I n   a d d i t i o n   t o   t h e   b u i l t - i n   s u p p o r t   f o r   A r e a s ,   y o u   c a n   a l s o   u s e   y o u r   o w n   f o l d e r   s t r u c t u r e ,   a n d   c o n v e n t i o n s   i n   p l a c e   o f   a t t r i b u t e s   a n d   c u s t o m   r o u t e s .   T h i s   w o u l d   a l l o w   y o u   t o   h a v e   f e a t u r e   f o l d e r s   t h a t   d i d n t   i n c l u d e   s e p a r a t e   f o l d e r s   f o r   V i e w s ,   C o n t r o l l e r s ,   e t c . ,   k e e p i n g   t h e   h i e r a r c h y   f l a t t e r   a n d   m a k i n g   i t   e a s i e r   t o   s e e   a l l   r e l a t e d   f i l e s   i n   a   s i n g l e   p l a c e   f o r   e a c h   f e a t u r e .   A S P . N E T   C o r e   u s e s   b u i l t - i n   c o n v e n t i o n   t y p e s   t o   c o n t r o l   i t s   b e h a v i o r .   Y o u   c a n   m o d i f y   o r   r e p l a c e   t h e s e   c o n v e n t i o n s .   F o r   e x a m p l e ,   y o u   c a n   c r e a t e   a   c o n v e n t i o n   t h a t   w i l l   a u t o m a t i c a l l y   g e t   t h e   f e a t u r e   n a m e   f o r   a   g i v e n   c o n t r o l l e r   b a s e d   o n   i t s   n a m e s p a c e   ( w h i c h   t y p i c a l l y   c o r r e l a t e s   t o   t h e   f o l d e r   i n   w h i c h   t h e   c o n t r o l l e r   i s   l o c a t e d ) :   F e a t u r e C o n v e n t i o n   :   I C o n t r o l l e r M o d e l C o n v e n t i o n   {       p u b l i c   v o i d   A p p l y ( C o n t r o l l e r M o d e l   c o n t r o l l e r )       {           c o n t r o l l e r . P r o p e r t i e s . A d d ( " f e a t u r e " ,                 G e t F e a t u r e N a m e ( c o n t r o l l e r . C o n t r o l l e r T y p e ) ) ;       }       p r i v a t e   s t r i n g   G e t F e a t u r e N a m e ( T y p e I n f o   c o n t r o l l e r T y p e )       {           s t r i n g [ ]   t o k e n s   =   c o n t r o l l e r T y p e . F u l l N a m e . S p l i t ( ' . ' ) ;           i f   ( ! t o k e n s . A n y ( t   = >   t   = =   " F e a t u r e s " ) )   r e t u r n   " " ;           s t r i n g   f e a t u r e N a m e   =   t o k e n s               . S k i p W h i l e ( t   = >   ! t . E q u a l s ( " f e a t u r e s " ,                   S t r i n g C o m p a r i s o n . C u r r e n t C u l t u r e I g n o r e C a s e ) )               . S k i p ( 1 )               . T a k e ( 1 )               . F i r s t O r D e f a u l t ( ) ;           r e t u r n   f e a t u r e N a m e ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 7         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s         }   }   Y o u   t h e n   s p e c i f y   t h i s   c o n v e n t i o n   a s   a n   o p t i o n   w h e n   y o u   a d d   s u p p o r t   f o r   M V C   t o   y o u r   a p p l i c a t i o n   i n   C o n f i g u r e S e r v i c e s :   s e r v i c e s . A d d M v c ( o   = >   o . C o n v e n t i o n s . A d d ( n e w   F e a t u r e C o n v e n t i o n ( ) ) ) ;   A S P . N E T   C o r e   M V C   a l s o   u s e s   a   c o n v e n t i o n   t o   l o c a t e   v i e w s .   Y o u   c a n   o v e r r i d e   i t   w i t h   a   c u s t o m   c o n v e n t i o n   s o   t h a t   v i e w s   w i l l   b e   i n   y o u r   f e a t u r e   f o l d e r s   ( u s i n g   t h e   f e a t u r e   n a m e   p r o v i d e d   b y   t h e   F e a t u r e C o n v e n t i o n ,   a b o v e ) .   Y o u   c a n   l e a r n   m o r e   a b o u t   t h i s   a p p r o a c h   a n d   d o w n l o a d   a   w o r k i n g   s a m p l e   f r o m   t h e   M S D N   a r t i c l e ,   F e a t u r e   S l i c e s   f o r   A S P . N E T   C o r e   M V C .   R a z o r   P a g e s   R a z o r   P a g e s   o f f e r   m a n y   o f   t h e   s a m e   o r g a n i z a t i o n   b e n e f i t s   a s   f e a t u r e   f o l d e r s   o r   a r e a s .   W h e n   u s i n g   R a z o r   P a g e s ,   y o u   n o   l o n g e r   n e e d   s e p a r a t e   f o l d e r s   a n d   f i l e s   f o r   c o n t r o l l e r s ,   v i e w s ,   a n d   v i e w m o d e l s .   Y o u   a l s o   w i l l   n o t   h a v e   m a n y   d i f f e r e n t   v i e w s   f o r   a   g i v e n   c o n t r o l l e r .   I n s t e a d ,   y o u   w i l l   c r e a t e   a   s i n g l e   p a g e   f i l e   f o r   e a c h   l o g i c a l   p a g e   t h e   u s e r   i n t e r a c t s   w i t h .   A n y   l o g i c   a s s o c i a t e d   w i t h   t h i s   p a g e   w i l l   b e   s p e c i f i e d   i n   i t s   P a g e   M o d e l ,   a l o n g   w i t h   a n y   v i e w   d a t a   t h a t   t h e   p a g e   r e q u i r e s   ( o f t e n   a s   a   n e s t e d   c l a s s   w i t h i n   t h e   p a g e   m o d e l ) .   R a z o r   P a g e s   a n d   t h e i r   p a g e   m o d e l s   a r e   g r o u p e d   t o g e t h e r   b y   V i s u a l   S t u d i o ,   s o   n a v i g a t i n g   b e t w e e n   r a z o r   m a r k u p   a n d   t h e   c o r r e s p o n d i n g   c o d e   a n d   d a t a   m o d e l   d o e s n t   r e q u i r e   m o v i n g   b e t w e e n   f o l d e r s   w i t h i n   y o u r   p r o j e c t .   A s   t h e   n u m b e r   o f   p a g e s   i n   y o u r   a p p l i c a t i o n   g r o w s ,   y o u   c a n   e a s i l y   o r g a n i z e   t h e m   w i t h i n   t h e   P a g e s   f o l d e r   b y   u s i n g   s u b f o l d e r s   t h a t   c o r r e s p o n d   t o   y o u r   a p p l i c a t i o n s   U R L   s t r u c t u r e .   L e a r n   m o r e   a b o u t   b u i l d i n g   S i m p l e r   A S P . N E T   C o r e   M V C   A p p s   w i t h   R a z o r   P a g e s   i n   M S D N   m a g a z i n e .   C r o s s - C u t t i n g   C o n c e r n s   A s   a p p l i c a t i o n s   g r o w ,   i t   b e c o m e s   i n c r e a s i n g l y   i m p o r t a n t   t o   f a c t o r   o u t   c r o s s - c u t t i n g   c o n c e r n s   t o   e l i m i n a t e   d u p l i c a t i o n   a n d   m a i n t a i n   c o n s i s t e n c y .   S o m e   e x a m p l e s   o f   c r o s s - c u t t i n g   c o n c e r n s   i n   A S P . N E T   C o r e   a p p l i c a t i o n s   a r e   a u t h e n t i c a t i o n ,   m o d e l   v a l i d a t i o n   r u l e s ,   o u t p u t   c a c h i n g ,   a n d   e r r o r   h a n d l i n g ,   t h o u g h   t h e r e   a r e   m a n y   o t h e r s .   A S P . N E T   C o r e   M V C   f i l t e r s   a l l o w   y o u   t o   r u n   c o d e   b e f o r e   o r   a f t e r   c e r t a i n   s t e p s   i n   t h e   r e q u e s t   p r o c e s s i n g   p i p e l i n e .   F o r   i n s t a n c e ,   a   f i l t e r   c a n   r u n   b e f o r e   a n d   a f t e r   m o d e l   b i n d i n g ,   b e f o r e   a n d   a f t e r   a n   a c t i o n ,   o r   b e f o r e   a n d   a f t e r   a n   a c t i o n s   r e s u l t .   Y o u   c a n   a l s o   u s e   a n   a u t h o r i z a t i o n   f i l t e r   t o   c o n t r o l   a c c e s s   t o   t h e   r e s t   o f   t h e   p i p e l i n e .   F i g u r e s   7 - 3   s h o w s   h o w   r e q u e s t   e x e c u t i o n   f l o w s   t h r o u g h   f i l t e r s ,   i f   c o n f i g u r e d .   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 8         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s       F i g u r e   7 - 3   R e q u e s t   e x e c u t i o n   t h r o u g h   f i l t e r s   a n d   r e q u e s t   p i p e l i n e .   F i l t e r s   a r e   u s u a l l y   i m p l e m e n t e d   a s   a t t r i b u t e s ,   s o   y o u   c a n   a p p l y   t h e m   c o n t r o l l e r s   o r   a c t i o n s .   W h e n   a d d e d   i n   t h i s   f a s h i o n ,   f i l t e r s   s p e c i f i e d   a t   t h e   a c t i o n   l e v e l   o v e r r i d e   o r   b u i l d   u p o n   f i l t e r s   s p e c i f i e d   a t   t h e   c o n t r o l l e r   l e v e l ,   w h i c h   t h e m s e l v e s   o v e r r i d e   g l o b a l   f i l t e r s .   F o r   e x a m p l e ,   t h e   [ R o u t e ]   a t t r i b u t e   c a n   b e   u s e d   t o   b u i l d   u p   r o u t e s   b e t w e e n   c o n t r o l l e r s   a n d   a c t i o n s .   L i k e w i s e ,   a u t h o r i z a t i o n   c a n   b e   c o n f i g u r e d   a t   t h e   c o n t r o l l e r   l e v e l ,   a n d   t h e n   o v e r r i d d e n   b y   i n d i v i d u a l   a c t i o n s ,   a s   t h e   f o l l o w i n g   s a m p l e   d e m o n s t r a t e s :   [ A u t h o r i z e ]   p u b l i c   c l a s s   A c c o u n t C o n t r o l l e r   :   C o n t r o l l e r   {           [ A l l o w A n o n y m o u s ]           p u b l i c   a s y n c   T a s k < I A c t i o n R e s u l t >   L o g i n ( )   { }             p u b l i c   a s y n c   T a s k < I A c t i o n R e s u l t >   F o r g o t P a s s w o r d ( )   { }   }   T h e   f i r s t   m e t h o d ,   L o g i n ,   u s e s   t h e   A l l o w A n o n y m o u s   f i l t e r   ( a t t r i b u t e )   t o   o v e r r i d e   t h e   A u t h o r i z e   f i l t e r   s e t   a t   t h e   c o n t r o l l e r   l e v e l .   T h e   F o r g o t P a s s w o r d   a c t i o n   ( a n d   a n y   o t h e r   a c t i o n   i n   t h e   c l a s s   t h a t   d o e s n t   h a v e   a n   A l l o w A n o n y m o u s   a t t r i b u t e )   w i l l   r e q u i r e   a n   a u t h e n t i c a t e d   r e q u e s t .   Evaluation Warning: The document was created with Spire.PDF for .NET
    5 9         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     F i l t e r s   c a n   b e   u s e d   t o   e l i m i n a t e   d u p l i c a t i o n   i n   t h e   f o r m   o f   c o m m o n   e r r o r   h a n d l i n g   p o l i c i e s   f o r   A P I s .   F o r   e x a m p l e ,   a   t y p i c a l   A P I   p o l i c y   i s   t o   r e t u r n   a   N o t F o u n d   r e s p o n s e   t o   r e q u e s t s   r e f e r e n c i n g   k e y s   t h a t   d o   n o t   e x i s t ,   a n d   a   B a d R e q u e s t   r e s p o n s e   i f   m o d e l   v a l i d a t i o n   f a i l s .   T h e   f o l l o w i n g   e x a m p l e   d e m o n s t r a t e s   t h e s e   t w o   p o l i c i e s   i n   a c t i o n :   [ H t t p P u t ( " { i d } " ) ]       p u b l i c   a s y n c   T a s k < I A c t i o n R e s u l t >   P u t ( i n t   i d ,   [ F r o m B o d y ] A u t h o r   a u t h o r )       {           i f   ( ( a w a i t   _ a u t h o r R e p o s i t o r y . L i s t A s y n c ( ) ) . A l l ( a   = >   a . I d   ! =   i d ) )           {               r e t u r n   N o t F o u n d ( i d ) ;           }           i f   ( ! M o d e l S t a t e . I s V a l i d )           {                 r e t u r n   B a d R e q u e s t ( M o d e l S t a t e ) ;           }           a u t h o r . I d   =   i d ;           a w a i t   _ a u t h o r R e p o s i t o r y . U p d a t e A s y n c ( a u t h o r ) ;           r e t u r n   O k ( ) ;       }   D o n t   a l l o w   y o u r   a c t i o n   m e t h o d s   t o   b e c o m e   c l u t t e r e d   w i t h   c o n d i t i o n a l   c o d e   l i k e   t h i s .   I n s t e a d ,   p u l l   t h e   p o l i c i e s   i n t o   f i l t e r s   t h a t   c a n   b e   a p p l i e d   o n   a n   a s - n e e d e d   b a s i s .   I n   t h i s   e x a m p l e ,   t h e   m o d e l   v a l i d a t i o n   c h e c k ,   w h i c h   s h o u l d   o c c u r   a n y   t i m e   a   c o m m a n d   i s   s e n t   t o   t h e   A P I ,   c a n   b e   r e p l a c e d   b y   t h e   f o l l o w i n g   a t t r i b u t e :   p u b l i c   c l a s s   V a l i d a t e M o d e l A t t r i b u t e   :   A c t i o n F i l t e r A t t r i b u t e   {       p u b l i c   o v e r r i d e   v o i d   O n A c t i o n E x e c u t i n g ( A c t i o n E x e c u t i n g C o n t e x t   c o n t e x t )           {           i f   ( ! c o n t e x t . M o d e l S t a t e . I s V a l i d )           {               c o n t e x t . R e s u l t   =   n e w   B a d R e q u e s t O b j e c t R e s u l t ( c o n t e x t . M o d e l S t a t e ) ;           }       }   }   Y o u   c a n   a d d   t h e   V a l i d a t e M o d e l A t t r i b u t e   t o   y o u r   p r o j e c t   a s   a   N u g e t   d e p e n d e n c y   b y   i n c l u d i n g   t h e   A r d a l i s . V a l i d a t e M o d e l   p a c k a g e .   L i k e w i s e ,   a   f i l t e r   c a n   b e   u s e d   t o   c h e c k   i f   a   r e c o r d   e x i s t s   a n d   r e t u r n   a   4 0 4   b e f o r e   t h e   a c t i o n   i s   e x e c u t e d ,   e l i m i n a t i n g   t h e   n e e d   t o   p e r f o r m   t h e s e   c h e c k s   i n   t h e   a c t i o n .   O n c e   y o u v e   p u l l e d   o u t   c o m m o n   c o n v e n t i o n s   a n d   o r g a n i z e d   y o u r   s o l u t i o n   t o   s e p a r a t e   i n f r a s t r u c t u r e   c o d e   a n d   b u s i n e s s   l o g i c   f r o m   y o u r   U I ,   y o u r   M V C   a c t i o n   m e t h o d s   s h o u l d   b e   e x t r e m e l y   t h i n :   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 0         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s         / /   P U T   a p i / a u t h o r s 2 / 5       [ H t t p P u t ( " { i d } " ) ]       [ V a l i d a t e A u t h o r E x i s t s ]       p u b l i c   a s y n c   T a s k < I A c t i o n R e s u l t >   P u t ( i n t   i d ,   [ F r o m B o d y ] A u t h o r   a u t h o r )       {           a w a i t   _ a u t h o r R e p o s i t o r y . U p d a t e A s y n c ( a u t h o r ) ;           r e t u r n   O k ( ) ;       }   Y o u   c a n   r e a d   m o r e   a b o u t   i m p l e m e n t i n g   f i l t e r s   a n d   d o w n l o a d   a   w o r k i n g   s a m p l e   f r o m   t h e   M S D N   a r t i c l e ,   R e a l   W o r l d   A S P . N E T   C o r e   M V C   F i l t e r s .     R e f e r e n c e s     S t r u c t u r i n g   A p p l i c a t i o n s   M S D N     F e a t u r e   S l i c e s   f o r   A S P . N E T   C o r e   M V C   h t t p s : / / m s d n . m i c r o s o f t . c o m / e n - u s / m a g a z i n e / m t 7 6 3 2 3 3 . a s p x   M S D N     S i m p l e r   A S P . N E T   M V C   A p p s   w i t h   R a z o r   P a g e s   h t t p s : / / m s d n . m i c r o s o f t . c o m / e n - u s / m a g a z i n e / m t 8 4 2 5 1 2 . a s p x   N e w   i s   G l u e   h t t p s : / / w w w . w e e k l y d e v t i p s . c o m / 0 0 5   M S D N     R e a l   W o r l d   A S P . N E T   C o r e   M V C   F i l t e r s   h t t p s : / / m s d n . m i c r o s o f t . c o m / e n - u s / m a g a z i n e / m t 7 6 7 6 9 9 . a s p x   A r e a s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / c o n t r o l l e r s / a r e a s     F i l t e r s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / m v c / c o n t r o l l e r s / f i l t e r s   V a l i d a t e M o d e l   N u g e t   P a c k a g e   h t t p s : / / w w w . n u g e t . o r g / p a c k a g e s / A r d a l i s . V a l i d a t e M o d e l       S e c u r i t y   S e c u r i n g   w e b   a p p l i c a t i o n s   i s   a   l a r g e   t o p i c ,   w i t h   m a n y   c o n s i d e r a t i o n s .   A t   i t s   m o s t   b a s i c   l e v e l ,   s e c u r i t y   i n v o l v e s   e n s u r i n g   y o u   k n o w   w h o   a   g i v e n   r e q u e s t   i s   c o m i n g   f r o m ,   a n d   t h e n   e n s u r i n g   t h a t   t h a t   r e q u e s t   o n l y   h a s   a c c e s s   t o   r e s o u r c e s   i t   s h o u l d .   A u t h e n t i c a t i o n   i s   t h e   p r o c e s s   o f   c o m p a r i n g   c r e d e n t i a l s   p r o v i d e d   w i t h   a   r e q u e s t   t o   t h o s e   i n   a   t r u s t e d   d a t a   s t o r e ,   t o   s e e   i f   t h e   r e q u e s t   s h o u l d   b e   t r e a t e d   a s   c o m i n g   f r o m   a   k n o w n   e n t i t y .   A u t h o r i z a t i o n   i s   t h e   p r o c e s s   o f   r e s t r i c t i n g   a c c e s s   t o   c e r t a i n   r e s o u r c e s   b a s e d   o n   u s e r   i d e n t i t y .   A   t h i r d   s e c u r i t y   c o n c e r n   i s   p r o t e c t i n g   r e q u e s t s   f r o m   e a v e s d r o p p i n g   b y   t h i r d   p a r t i e s ,   f o r   w h i c h   y o u   s h o u l d   a t   l e a s t   e n s u r e   t h a t   S S L   i s   u s e d   b y   y o u r   a p p l i c a t i o n .   A u t h e n t i c a t i o n   A S P . N E T   C o r e   I d e n t i t y   i s   a   m e m b e r s h i p   s y s t e m   y o u   c a n   u s e   t o   s u p p o r t   l o g i n   f u n c t i o n a l i t y   f o r   y o u r   a p p l i c a t i o n .   I t   h a s   s u p p o r t   f o r   l o c a l   u s e r   a c c o u n t s   a s   w e l l   a s   e x t e r n a l   l o g i n   p r o v i d e r   s u p p o r t   f r o m   p r o v i d e r s   l i k e   M i c r o s o f t   A c c o u n t ,   T w i t t e r ,   F a c e b o o k ,   G o o g l e ,   a n d   m o r e .   I n   a d d i t i o n   t o   A S P . N E T   C o r e   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 1         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     I d e n t i t y ,   y o u r   a p p l i c a t i o n   c a n   u s e   w i n d o w s   a u t h e n t i c a t i o n ,   o r   a   t h i r d - p a r t y   i d e n t i t y   p r o v i d e r   l i k e   I d e n t i t y   S e r v e r .   A S P . N E T   C o r e   I d e n t i t y   i s   i n c l u d e d   i n   n e w   p r o j e c t   t e m p l a t e s   i f   t h e   I n d i v i d u a l   U s e r   A c c o u n t s   o p t i o n   i s   s e l e c t e d .   T h i s   t e m p l a t e   i n c l u d e s   s u p p o r t   f o r   r e g i s t r a t i o n ,   l o g i n ,   e x t e r n a l   l o g i n s ,   f o r g o t t e n   p a s s w o r d s ,   a n d   a d d i t i o n a l   f u n c t i o n a l i t y .       F i g u r e   7 - 4 .   S e l e c t   I n d i v i d u a l   U s e r   A c c o u n t s   t o   h a v e   I d e n t i t y   p r e c o n f i g u r e d .   I d e n t i t y   s u p p o r t   i s   c o n f i g u r e d   i n   S t a r t u p ,   b o t h   i n   C o n f i g u r e S e r v i c e s   a n d   C o n f i g u r e :   p u b l i c   v o i d   C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n   s e r v i c e s )   {           s e r v i c e s . A d d D b C o n t e x t < A p p l i c a t i o n D b C o n t e x t > ( o p t i o n s   = >                   o p t i o n s . U s e S q l S e r v e r ( C o n f i g u r a t i o n . G e t C o n n e c t i o n S t r i n g ( " D e f a u l t C o n n e c t i o n " ) ) ) ;             s e r v i c e s . A d d I d e n t i t y < A p p l i c a t i o n U s e r ,   I d e n t i t y R o l e > ( )                   . A d d E n t i t y F r a m e w o r k S t o r e s < A p p l i c a t i o n D b C o n t e x t > ( )                   . A d d D e f a u l t T o k e n P r o v i d e r s ( ) ;             s e r v i c e s . A d d M v c ( )   }   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 2         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s       p u b l i c   v o i d   C o n f i g u r e ( I A p p l i c a t i o n B u i l d e r   a p p ,                     I H o s t i n g E n v i r o n m e n t   e n v )   {           i f   ( e n v . I s D e v e l o p m e n t ( ) )           {                   a p p . U s e D e v e l o p e r E x c e p t i o n P a g e ( ) ;                   a p p . U s e B r o w s e r L i n k ( ) ;                   a p p . U s e D a t a b a s e E r r o r P a g e ( ) ;           }           e l s e           {                   a p p . U s e E x c e p t i o n H a n d l e r ( " / E r r o r " ) ;           }             a p p . U s e S t a t i c F i l e s ( ) ;             a p p . U s e A u t h e n t i c a t i o n ( ) ;             a p p . U s e M v c ( r o u t e s   = >           {                   r o u t e s . M a p R o u t e (                           n a m e :   " d e f a u l t " ,                           t e m p l a t e :   " { c o n t r o l l e r } / { a c t i o n = I n d e x } / { i d ? } " ) ;           } ) ;   }   I t s   i m p o r t a n t   t h a t   U s e A u t h e n t i c a t i o n   a p p e a r   b e f o r e   U s e M v c   i n   t h e   C o n f i g u r e   m e t h o d .   W h e n   c o n f i g u r i n g   I d e n t i t y   i n   C o n f i g u r e S e r v i c e s ,   y o u l l   n o t i c e   a   c a l l   t o   A d d D e f a u l t T o k e n P r o v i d e r s .   T h i s   h a s   n o t h i n g   t o   d o   w i t h   t o k e n s   t h a t   m a y   b e   u s e d   t o   s e c u r e   w e b   c o m m u n i c a t i o n s ,   b u t   i n s t e a d   r e f e r s   t o   p r o v i d e r s   t h a t   c r e a t e   p r o m p t s   t h a t   c a n   b e   s e n t   t o   u s e r s   v i a   S M S   o r   e m a i l   f o r   t h e m   t o   c o n f i r m   t h e i r   i d e n t i t y .   Y o u   c a n   l e a r n   m o r e   a b o u t   c o n f i g u r i n g   t w o - f a c t o r   a u t h e n t i c a t i o n   a n d   e n a b l i n g   e x t e r n a l   l o g i n   p r o v i d e r s   f r o m   t h e   o f f i c i a l   A S P . N E T   C o r e   d o c s .   A u t h o r i z a t i o n   T h e   s i m p l e s t   f o r m   o f   a u t h o r i z a t i o n   i n v o l v e s   r e s t r i c t i n g   a c c e s s   t o   a n o n y m o u s   u s e r s .   W h e n   u s i n g   R a z o r   P a g e s ,   c o n t r o l l i n g   a c c e s s   t o   i n d i v i d u a l   p a g e s   o r   f o l d e r s   i s   d o n e   w h e n   c o n f i g u r i n g   M V C   i n   S t a r t u p :   s e r v i c e s . A d d M v c ( )           . A d d R a z o r P a g e s O p t i o n s ( o p t i o n s   = >           {                   o p t i o n s . C o n v e n t i o n s . A u t h o r i z e F o l d e r ( " / O r d e r " ) ;           } ) ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 3         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     W h e n   u s i n g   c o n t r o l l e r s ,   a n d   v i e w s ,   a p p l y   t h e   [ A u t h o r i z e ]   a t t r i b u t e   t o   c e r t a i n   c o n t r o l l e r s   o r   a c t i o n s .   I f   r o l e s   a r e   b e i n g   u s e d ,   t h e   a t t r i b u t e   c a n   b e   f u r t h e r   e x t e n d e d   t o   r e s t r i c t   a c c e s s   t o   u s e r s   w h o   b e l o n g   t o   c e r t a i n   r o l e s ,   a s   s h o w n :   [ A u t h o r i z e ( R o l e s   =   " H R M a n a g e r , F i n a n c e " ) ]   p u b l i c   c l a s s   S a l a r y C o n t r o l l e r   :   C o n t r o l l e r   {   }   I n   t h i s   c a s e ,   u s e r s   b e l o n g i n g   t o   e i t h e r   t h e   H R M a n a g e r   o r   F i n a n c e   r o l e s   ( o r   b o t h )   w o u l d   h a v e   a c c e s s   t o   t h e   S a l a r y C o n t r o l l e r .   T o   r e q u i r e   t h a t   a   u s e r   b e l o n g   t o   m u l t i p l e   r o l e s   ( n o t   j u s t   o n e   o f   s e v e r a l ) ,   y o u   c a n   a p p l y   t h e   a t t r i b u t e   m u l t i p l e   t i m e s ,   s p e c i f y i n g   a   r e q u i r e d   r o l e   e a c h   t i m e .   S p e c i f y i n g   c e r t a i n   s e t s   o f   r o l e s   a s   s t r i n g s   i n   m a n y   d i f f e r e n t   c o n t r o l l e r s   a n d   a c t i o n s   c a n   l e a d   t o   u n d e s i r a b l e   r e p e t i t i o n .   Y o u   c a n   c o n f i g u r e   a u t h o r i z a t i o n   p o l i c i e s ,   w h i c h   e n c a p s u l a t e   a u t h o r i z a t i o n   r u l e s ,   a n d   t h e n   s p e c i f y   t h e   p o l i c y   i n s t e a d   o f   i n d i v i d u a l   r o l e s   w h e n   a p p l y i n g   t h e   [ A u t h o r i z e ]   a t t r i b u t e :   [ A u t h o r i z e ( P o l i c y   =   " C a n V i e w P r i v a t e R e p o r t " ) ]   p u b l i c   I A c t i o n R e s u l t   E x e c u t i v e S a l a r y R e p o r t ( )   {           r e t u r n   V i e w ( ) ;   }   U s i n g   p o l i c i e s   i n   t h i s   w a y ,   y o u   c a n   s e p a r a t e   t h e   k i n d s   o f   a c t i o n s   b e i n g   r e s t r i c t e d   f r o m   t h e   s p e c i f i c   r o l e s   o r   r u l e s   t h a t   a p p l y   t o   i t .   L a t e r ,   i f   y o u   c r e a t e   a   n e w   r o l e   t h a t   n e e d s   t o   h a v e   a c c e s s   t o   c e r t a i n   r e s o u r c e s ,   y o u   c a n   j u s t   u p d a t e   a   p o l i c y ,   r a t h e r   t h a n   u p d a t i n g   e v e r y   l i s t   o f   r o l e s   o n   e v e r y   [ A u t h o r i z e ]   a t t r i b u t e .   C l a i m s   C l a i m s   a r e   n a m e   v a l u e   p a i r s   t h a t   r e p r e s e n t   p r o p e r t i e s   o f   a n   a u t h e n t i c a t e d   u s e r .   F o r   e x a m p l e ,   y o u   m i g h t   s t o r e   u s e r s   e m p l o y e e   n u m b e r   a s   a   c l a i m .   C l a i m s   c a n   t h e n   b e   u s e d   a s   p a r t   o f   a u t h o r i z a t i o n   p o l i c i e s .   Y o u   c o u l d   c r e a t e   a   p o l i c y   c a l l e d   E m p l o y e e O n l y   t h a t   r e q u i r e s   t h e   e x i s t e n c e   o f   a   c l a i m   c a l l e d   E m p l o y e e N u m b e r ,   a s   s h o w n   i n   t h i s   e x a m p l e :   p u b l i c   v o i d   C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n   s e r v i c e s )   {           s e r v i c e s . A d d M v c ( ) ;             s e r v i c e s . A d d A u t h o r i z a t i o n ( o p t i o n s   = >           {                   o p t i o n s . A d d P o l i c y ( " E m p l o y e e O n l y " ,   p o l i c y   = >   p o l i c y . R e q u i r e C l a i m ( " E m p l o y e e N u m b e r " ) ) ;           } ) ;   }   T h i s   p o l i c y   c o u l d   t h e n   b e   u s e d   w i t h   t h e   [ A u t h o r i z e ]   a t t r i b u t e   t o   p r o t e c t   a n y   c o n t r o l l e r   a n d / o r   a c t i o n ,   a s   d e s c r i b e d   a b o v e .     Evaluation Warning: The document was created with Spire.PDF for .NET
    6 4         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     S e c u r i n g   W e b   A P I s   M o s t   w e b   A P I s   s h o u l d   i m p l e m e n t   a   t o k e n - b a s e d   a u t h e n t i c a t i o n   s y s t e m .   T o k e n   a u t h e n t i c a t i o n   i s   s t a t e l e s s   a n d   d e s i g n e d   t o   b e   s c a l a b l e .   I n   a   t o k e n - b a s e d   a u t h e n t i c a t i o n   s y s t e m ,   t h e   c l i e n t   m u s t   f i r s t   a u t h e n t i c a t e   w i t h   t h e   a u t h e n t i c a t i o n   p r o v i d e r .   I f   s u c c e s s f u l ,   t h e   c l i e n t   i s   i s s u e d   a   t o k e n ,   w h i c h   i s   s i m p l y   a   c r y p t o g r a p h i c a l l y   m e a n i n g f u l   s t r i n g   o f   c h a r a c t e r s .   W h e n   t h e   c l i e n t   t h e n   n e e d s   t o   i s s u e   a   r e q u e s t   t o   a n   A P I ,   i t   a d d s   t h i s   t o k e n   a s   a   h e a d e r   o n   t h e   r e q u e s t .   T h e   s e r v e r   t h e n   v a l i d a t e s   t h e   t o k e n   f o u n d   i n   t h e   r e q u e s t   h e a d e r   b e f o r e   c o m p l e t i n g   t h e   r e q u e s t .   F i g u r e   7 - 5   d e m o n s t r a t e s   t h i s   p r o c e s s .     F i g u r e   7 - 5 .   T o k e n - b a s e d   a u t h e n t i c a t i o n   f o r   W e b   A P I s .       R e f e r e n c e s     S e c u r i t y     S e c u r i t y   D o c s   O v e r v i e w   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / s e c u r i t y /     E n f o r c i n g   S S L   i n   a n   A S P . N E T   C o r e   A p p   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / s e c u r i t y / e n f o r c i n g - s s l   I n t r o d u c t i o n   t o   I d e n t i t y   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / s e c u r i t y / a u t h e n t i c a t i o n / i d e n t i t y   I n t r o d u c t i o n   t o   A u t h o r i z a t i o n   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / s e c u r i t y / a u t h o r i z a t i o n / i n t r o d u c t i o n   A u t h e n t i c a t i o n   a n d   A u t h o r i z a t i o n   f o r   A P I   A p p s   i n   A z u r e   A p p   S e r v i c e   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / a p p - s e r v i c e - a p i / a p p - s e r v i c e - a p i - a u t h e n t i c a t i o n       Evaluation Warning: The document was created with Spire.PDF for .NET
    6 5         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     C l i e n t   C o m m u n i c a t i o n   I n   a d d i t i o n   t o   s e r v i n g   p a g e s   a n d   r e s p o n d i n g   t o   r e q u e s t s   f o r   d a t a   v i a   w e b   A P I s ,   A S P . N E T   C o r e   a p p s   c a n   c o m m u n i c a t e   d i r e c t l y   w i t h   c o n n e c t e d   c l i e n t s .   T h i s   o u t b o u n d   c o m m u n i c a t i o n   c a n   u s e   a   v a r i e t y   o f   t r a n s p o r t   t e c h n o l o g i e s ,   t h e   m o s t   c o m m o n   b e i n g   W e b S o c k e t s .   A S P . N E T   C o r e   S i g n a l R   i s   a   l i b r a r y   t h a t   m a k e s   i t   s i m p l e   t o   a d d   r e a l - t i m e   s e r v e r - t o - c l i e n t   c o m m u n i c a t i o n   f u n c t i o n a l i t y   t o   y o u r   a p p l i c a t i o n s .   S i g n a l R   s u p p o r t s   a   v a r i e t y   o f   t r a n s p o r t   t e c h n o l o g i e s ,   i n c l u d i n g   W e b S o c k e t s ,   a n d   a b s t r a c t s   a w a y   m a n y   o f   t h e   i m p l e m e n t a t i o n   d e t a i l s   f r o m   t h e   d e v e l o p e r .     A S P . N E T   C o r e   S i g n a l R   i s   a v a i l a b l e   w i t h   A S P . N E T   C o r e   2 . 1 .   R e a l - t i m e   c l i e n t   c o m m u n i c a t i o n ,   w h e t h e r   u s i n g   W e b S o c k e t s   d i r e c t l y   o r   o t h e r   t e c h n i q u e s ,   a r e   u s e f u l   i n   a   v a r i e t y   o f   a p p l i c a t i o n   s c e n a r i o s .   S o m e   e x a m p l e s   i n c l u d e :     L i v e   c h a t   r o o m   a p p l i c a t i o n s     M o n i t o r i n g   a p p l i c a t i o n s     J o b   p r o g r e s s   u p d a t e s     N o t i f i c a t i o n s     I n t e r a c t i v e   f o r m s   a p p l i c a t i o n s   W h e n   b u i l d i n g   c l i e n t   c o m m u n i c a t i o n   i n t o   y o u r   a p p l i c a t i o n s ,   t h e r e   a r e   t y p i c a l l y   t w o   c o m p o n e n t s :     S e r v e r - s i d e   c o n n e c t i o n   m a n a g e r   ( S i g n a l R   H u b ,   W e b S o c k e t M a n a g e r   W e b S o c k e t H a n d l e r )     C l i e n t - s i d e   l i b r a r y   C l i e n t s   a r e   n o t   l i m i t e d   t o   b r o w s e r s     m o b i l e   a p p s ,   c o n s o l e   a p p s ,   a n d   o t h e r   n a t i v e   a p p s   c a n   a l s o   c o m m u n i c a t e   u s i n g   S i g n a l R / W e b S o c k e t s .   T h e   f o l l o w i n g   s i m p l e   p r o g r a m   e c h o e s   a l l   c o n t e n t   s e n t   t o   a   c h a t   a p p l i c a t i o n   t o   t h e   c o n s o l e ,   a s   p a r t   o f   a   W e b S o c k e t M a n a g e r   s a m p l e   a p p l i c a t i o n :   p u b l i c   c l a s s   P r o g r a m   {   p r i v a t e   s t a t i c   C o n n e c t i o n   _ c o n n e c t i o n ;   p u b l i c   s t a t i c   v o i d   M a i n ( s t r i n g [ ]   a r g s )   {           S t a r t C o n n e c t i o n A s y n c ( ) ;             _ c o n n e c t i o n . O n ( " r e c e i v e M e s s a g e " ,   ( a r g u m e n t s )   = >           {                   C o n s o l e . W r i t e L i n e ( $ " { a r g u m e n t s [ 0 ] }   s a i d :   { a r g u m e n t s [ 1 ] } " ) ;           } ) ;             C o n s o l e . R e a d L i n e ( ) ;           S t o p C o n n e c t i o n A s y n c ( ) ;   }     p u b l i c   s t a t i c   a s y n c   T a s k   S t a r t C o n n e c t i o n A s y n c ( )   {           _ c o n n e c t i o n   =   n e w   C o n n e c t i o n ( ) ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 6         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s             a w a i t   _ c o n n e c t i o n . S t a r t C o n n e c t i o n A s y n c ( " w s : / / l o c a l h o s t : 6 5 1 1 0 / c h a t " ) ;   }     p u b l i c   s t a t i c   a s y n c   T a s k   S t o p C o n n e c t i o n A s y n c ( )   {           a w a i t   _ c o n n e c t i o n . S t o p C o n n e c t i o n A s y n c ( ) ;   }   C o n s i d e r   w a y s   i n   w h i c h   y o u r   a p p l i c a t i o n s   c o m m u n i c a t e   d i r e c t l y   w i t h   c l i e n t   a p p l i c a t i o n s ,   a n d   c o n s i d e r   w h e t h e r   r e a l - t i m e   c o m m u n i c a t i o n   w o u l d   i m p r o v e   y o u r   a p p s   u s e r   e x p e r i e n c e .   R e f e r e n c e s     C l i e n t   C o m m u n i c a t i o n     A S P . N E T   C o r e   S i g n a l R   h t t p s : / / g i t h u b . c o m / a s p n e t / S i g n a l R   W e b S o c k e t   M a n a g e r   h t t p s : / / g i t h u b . c o m / r a d u - m a t e i / w e b s o c k e t - m a n a g e r       D o m a i n - D r i v e n   D e s i g n     S h o u l d   Y o u   A p p l y   I t ?   D o m a i n - D r i v e n   D e s i g n   ( D D D )   i s   a n   a g i l e   a p p r o a c h   t o   b u i l d i n g   s o f t w a r e   t h a t   e m p h a s i z e s   f o c u s i n g   o n   t h e   b u s i n e s s   d o m a i n .   I t   p l a c e s   a   h e a v y   e m p h a s i s   o n   c o m m u n i c a t i o n   a n d   i n t e r a c t i o n   w i t h   b u s i n e s s   d o m a i n   e x p e r t ( s )   w h o   c a n   r e l a t e   t o   t h e   d e v e l o p e r s   h o w   t h e   r e a l - w o r l d   s y s t e m   w o r k s .   F o r   e x a m p l e ,   i f   y o u r e   b u i l d i n g   a   s y s t e m   t h a t   h a n d l e s   s t o c k   t r a d e s ,   y o u r   d o m a i n   e x p e r t   m i g h t   b e   a n   e x p e r i e n c e d   s t o c k   b r o k e r .   D D D   i s   d e s i g n e d   t o   a d d r e s s   l a r g e ,   c o m p l e x   b u s i n e s s   p r o b l e m s ,   a n d   i s   o f t e n   n o t   a p p r o p r i a t e   f o r   s m a l l e r ,   s i m p l e r   a p p l i c a t i o n s ,   a s   t h e   i n v e s t m e n t   i n   u n d e r s t a n d i n g   a n d   m o d e l i n g   t h e   d o m a i n   i s   n o t   w o r t h   i t .   W h e n   b u i l d i n g   s o f t w a r e   f o l l o w i n g   a   D D D   a p p r o a c h ,   y o u r   t e a m   ( i n c l u d i n g   n o n - t e c h n i c a l   s t a k e h o l d e r s   a n d   c o n t r i b u t o r s )   s h o u l d   d e v e l o p   a   u b i q u i t o u s   l a n g u a g e   f o r   t h e   p r o b l e m   s p a c e .   T h a t   i s ,   t h e   s a m e   t e r m i n o l o g y   s h o u l d   b e   u s e d   f o r   t h e   r e a l - w o r l d   c o n c e p t   b e i n g   m o d e l e d ,   t h e   s o f t w a r e   e q u i v a l e n t ,   a n d   a n y   s t r u c t u r e s   t h a t   m i g h t   e x i s t   t o   p e r s i s t   t h e   c o n c e p t   ( f o r   e x a m p l e ,   d a t a b a s e   t a b l e s ) .   T h u s ,   t h e   c o n c e p t s   d e s c r i b e d   i n   t h e   u b i q u i t o u s   l a n g u a g e   s h o u l d   f o r m   t h e   b a s i s   f o r   y o u r   d o m a i n   m o d e l .   Y o u r   d o m a i n   m o d e l   i s   c o m p r i s e d   o f   o b j e c t s   t h a t   i n t e r a c t   w i t h   o n e   a n o t h e r   t o   r e p r e s e n t   t h e   b e h a v i o r   o f   t h e   s y s t e m .   T h e s e   o b j e c t s   m a y   f a l l   i n t o   t h e   f o l l o w i n g   c a t e g o r i e s :     E n t i t i e s ,   w h i c h   r e p r e s e n t   o b j e c t s   w i t h   a   t h r e a d   o f   i d e n t i t y .   E n t i t i e s   a r e   t y p i c a l l y   s t o r e d   i n   p e r s i s t e n c e   w i t h   a   k e y   b y   w h i c h   t h e y   c a n   l a t e r   b e   r e t r i e v e d .     A g g r e g a t e s ,   w h i c h   r e p r e s e n t   g r o u p s   o f   o b j e c t s   t h a t   s h o u l d   b e   p e r s i s t e d   a s   a   u n i t .     V a l u e   o b j e c t s ,   w h i c h   r e p r e s e n t   c o n c e p t s   t h a t   c a n   b e   c o m p a r e d   b a s e d   o n   t h e   s u m   o f   t h e i r   p r o p e r t y   v a l u e s .   F o r   e x a m p l e ,   D a t e R a n g e   c o n s i s t i n g   o f   a   s t a r t   a n d   e n d   d a t e .     D o m a i n   e v e n t s ,   w h i c h   r e p r e s e n t   t h i n g s   h a p p e n i n g   w i t h i n   t h e   s y s t e m   t h a t   a r e   o f   i n t e r e s t   t o   o t h e r   p a r t s   o f   t h e   s y s t e m .   N o t e   t h a t   a   D D D   d o m a i n   m o d e l   s h o u l d   e n c a p s u l a t e   c o m p l e x   b e h a v i o r   w i t h i n   t h e   m o d e l .   E n t i t i e s ,   i n   p a r t i c u l a r ,   s h o u l d   n o t   m e r e l y   b e   c o l l e c t i o n s   o f   p r o p e r t i e s .   W h e n   t h e   d o m a i n   m o d e l   l a c k s   b e h a v i o r   a n d   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 7         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     m e r e l y   r e p r e s e n t s   t h e   s t a t e   o f   t h e   s y s t e m ,   i t   i s   s a i d   t o   b e   a n   a n e m i c   m o d e l ,   w h i c h   i s   u n d e s i r a b l e   i n   D D D .     I n   a d d i t i o n   t o   t h e s e   m o d e l   t y p e s ,   D D D   t y p i c a l l y   e m p l o y s   a   v a r i e t y   o f   p a t t e r n s :     R e p o s i t o r y ,   f o r   a b s t r a c t i n g   p e r s i s t e n c e   d e t a i l s .     F a c t o r y ,   f o r   e n c a p s u l a t i n g   c o m p l e x   o b j e c t   c r e a t i o n .     D o m a i n   e v e n t s ,   f o r   d e c o u p l i n g   d e p e n d e n t   b e h a v i o r   f r o m   t r i g g e r i n g   b e h a v i o r .     S e r v i c e s ,   f o r   e n c a p s u l a t i n g   c o m p l e x   b e h a v i o r   a n d / o r   i n f r a s t r u c t u r e   i m p l e m e n t a t i o n   d e t a i l s .     C o m m a n d ,   f o r   d e c o u p l i n g   i s s u i n g   c o m m a n d s   a n d   e x e c u t i n g   t h e   c o m m a n d   i t s e l f .     S p e c i f i c a t i o n ,   f o r   e n c a p s u l a t i n g   q u e r y   d e t a i l s .   D D D   a l s o   r e c o m m e n d s   t h e   u s e   o f   t h e   C l e a n   A r c h i t e c t u r e   d i s c u s s e d   p r e v i o u s l y ,   a l l o w i n g   f o r   l o o s e   c o u p l i n g ,   e n c a p s u l a t i o n ,   a n d   c o d e   t h a t   c a n   e a s i l y   b e   v e r i f i e d   u s i n g   u n i t   t e s t s .   W h e n   S h o u l d   Y o u   A p p l y   D D D   D D D   i s   w e l l - s u i t e d   t o   l a r g e   a p p l i c a t i o n s   w i t h   s i g n i f i c a n t   b u s i n e s s   ( n o t   j u s t   t e c h n i c a l )   c o m p l e x i t y .   T h e   a p p l i c a t i o n   s h o u l d   r e q u i r e   t h e   k n o w l e d g e   o f   d o m a i n   e x p e r t s .   T h e r e   s h o u l d   b e   s i g n i f i c a n t   b e h a v i o r   i n   t h e   d o m a i n   m o d e l   i t s e l f ,   r e p r e s e n t i n g   b u s i n e s s   r u l e s   a n d   i n t e r a c t i o n s   b e y o n d   s i m p l y   s t o r i n g   a n d   r e t r i e v i n g   t h e   c u r r e n t   s t a t e   o f   v a r i o u s   r e c o r d s   f r o m   d a t a   s t o r e s .   W h e n   S h o u l d n t   Y o u   A p p l y   D D D   D D D   i n v o l v e s   i n v e s t m e n t s   i n   m o d e l i n g ,   a r c h i t e c t u r e ,   a n d   c o m m u n i c a t i o n   t h a t   m a y   n o t   b e   w a r r a n t e d   f o r   s m a l l e r   a p p l i c a t i o n s   o r   a p p l i c a t i o n s   t h a t   a r e   e s s e n t i a l l y   j u s t   C R U D   ( c r e a t e / r e a d / u p d a t e / d e l e t e ) .   I f   y o u   c h o o s e   t o   a p p r o a c h   y o u r   a p p l i c a t i o n   f o l l o w i n g   D D D ,   b u t   f i n d   t h a t   y o u r   d o m a i n   h a s   a n   a n e m i c   m o d e l   w i t h   n o   b e h a v i o r ,   y o u   m a y   n e e d   t o   r e t h i n k   y o u r   a p p r o a c h .   E i t h e r   y o u r   a p p l i c a t i o n   m a y   n o t   n e e d   D D D ,   o r   y o u   m a y   n e e d   a s s i s t a n c e   r e f a c t o r i n g   y o u r   a p p l i c a t i o n   t o   e n c a p s u l a t e   b u s i n e s s   l o g i c   i n   t h e   d o m a i n   m o d e l ,   r a t h e r   t h a n   i n   y o u r   d a t a b a s e   o r   u s e r   i n t e r f a c e .   A   h y b r i d   a p p r o a c h   w o u l d   b e   t o   o n l y   u s e   D D D   f o r   t h e   t r a n s a c t i o n a l   o r   m o r e   c o m p l e x   a r e a s   o f   t h e   a p p l i c a t i o n ,   b u t   n o t   f o r   s i m p l e r   C R U D   o r   r e a d - o n l y   p o r t i o n s   o f   t h e   a p p l i c a t i o n .   F o r   i n s t a n c e ,   y o u   n e e d n t   h a v e   t h e   c o n s t r a i n t s   o f   a n   A g g r e g a t e   i f   y o u r e   q u e r y i n g   d a t a   t o   d i s p l a y   a   r e p o r t   o r   t o   v i s u a l i z e   d a t a   f o r   a   d a s h b o a r d .   I t s   p e r f e c t l y   a c c e p t a b l e   t o   h a v e   a   s e p a r a t e ,   s i m p l e r   r e a d   m o d e l   f o r   s u c h   r e q u i r e m e n t s .     R e f e r e n c e s     D o m a i n - D r i v e n   D e s i g n     D o m a i n - D r i v e n   D e s i g n   F u n d a m e n t a l s   ( c o u r s e )   h t t p : / / b i t . l y / d d d - f u n d a m e n t a l s   D e s i g n   P a t t e r n s   L i b r a r y   ( c o u r s e )   h t t p : / / b i t . l y / P S - d e s i g n - p a t t e r n s   D D D   i n   P l a i n   E n g l i s h   ( S t a c k O v e r f l o w   A n s w e r )   h t t p : / / b i t . l y / 2 p m V g K 2     Evaluation Warning: The document was created with Spire.PDF for .NET
    6 8         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s       D e p l o y m e n t   T h e r e   a r e   a   f e w   s t e p s   i n v o l v e d   i n   t h e   p r o c e s s   o f   d e p l o y i n g   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n ,   r e g a r d l e s s   o f   w h e r e   i t   w i l l   b e   h o s t e d .   T h e   f i r s t   s t e p   i s   t o   p u b l i s h   t h e   a p p l i c a t i o n ,   w h i c h   c a n   b e   d o n e   u s i n g   t h e   d o t n e t   p u b l i s h   C L I   c o m m a n d .   T h i s   w i l l   c o m p i l e   t h e   a p p l i c a t i o n   a n d   p l a c e   a l l   o f   t h e   f i l e s   n e e d e d   t o   r u n   t h e   a p p l i c a t i o n   i n t o   a   d e s i g n a t e d   f o l d e r .   W h e n   y o u   d e p l o y   f r o m   V i s u a l   S t u d i o ,   t h i s   s t e p   i s   p e r f o r m e d   f o r   y o u   a u t o m a t i c a l l y .   T h e   p u b l i s h   f o l d e r   c o n t a i n s   . e x e   a n d   . d l l   f i l e s   f o r   t h e   a p p l i c a t i o n   a n d   i t s   d e p e n d e n c i e s .   A   s e l f - c o n t a i n e d   a p p l i c a t i o n   w i l l   a l s o   i n c l u d e   a   v e r s i o n   o f   t h e   . N E T   r u n t i m e .   A S P . N E T   C o r e   a p p l i c a t i o n s   w i l l   a l s o   i n c l u d e   c o n f i g u r a t i o n   f i l e s ,   s t a t i c   c l i e n t   a s s e t s ,   a n d   M V C   v i e w s .   A S P . N E T   C o r e   a p p l i c a t i o n s   a r e   c o n s o l e   a p p l i c a t i o n s   t h a t   m u s t   b e   s t a r t e d   w h e n   t h e   s e r v e r   b o o t s   a n d   r e s t a r t e d   i f   t h e   a p p l i c a t i o n   ( o r   s e r v e r )   c r a s h e s .   A   p r o c e s s   m a n a g e r   c a n   b e   u s e d   t o   a u t o m a t e   t h i s   p r o c e s s .   T h e   m o s t   c o m m o n   p r o c e s s   m a n a g e r s   f o r   A S P . N E T   C o r e   a r e   N g i n x   a n d   A p a c h e   o n   L i n u x   a n d   I I S   o r   W i n d o w s   S e r v i c e   o n   W i n d o w s .   I n   a d d i t i o n   t o   a   p r o c e s s   m a n a g e r ,   A S P . N E T   C o r e   a p p l i c a t i o n s   h o s t e d   i n   t h e   K e s t r e l   w e b   s e r v e r   c a n   b e n e f i t   f r o m   t h e   u s e   o f   a   r e v e r s e   p r o x y   s e r v e r   ( t h i s   w a s   a   r e q u i r e m e n t   f o r   A S P . N E T   C o r e   1 . x ) .   A   r e v e r s e   p r o x y   s e r v e r   r e c e i v e s   H T T P   r e q u e s t s   f r o m   t h e   i n t e r n e t   a n d   f o r w a r d s   t h e m   t o   K e s t r e l   a f t e r   s o m e   p r e l i m i n a r y   h a n d l i n g .   R e v e r s e   p r o x y   s e r v e r s   p r o v i d e   a   l a y e r   o f   s e c u r i t y   f o r   t h e   a p p l i c a t i o n ,   a n d   a r e   u s e d   f o r   e d g e   d e p l o y m e n t s   ( e x p o s e d   t o   t r a f f i c   f r o m   t h e   I n t e r n e t ) .   A s   o f   A S P . N E T   C o r e   2 . 0 ,   K e s t r e l   n o w   s u p p o r t s   e d g e   d e p l o y m e n t s   d i r e c t l y .   H o w e v e r ,   K e s t r e l   a l s o   d o e s n t   s u p p o r t   h o s t i n g   m u l t i p l e   a p p l i c a t i o n s   o n   t h e   s a m e   p o r t ,   s o   t e c h n i q u e s   l i k e   h o s t   h e a d e r s   c a n n o t   b e   u s e d   w i t h   i t   t o   e n a b l e   h o s t i n g   m u l t i p l e   a p p l i c a t i o n s   o n   t h e   s a m e   p o r t   a n d   I P   a d d r e s s   ( a   s c e n a r i o   I I S   s u p p o r t s ) .       F i g u r e   7 - 6 .   A S P . N E T   C o r e   h o s t e d   i n   K e s t r e l   b e h i n d   a   r e v e r s e   p r o x y   s e r v e r     A n o t h e r   s c e n a r i o   i n   w h i c h   a   r e v e r s e   p r o x y   c a n   b e   h e l p f u l   i s   t o   s e c u r e   m u l t i p l e   a p p l i c a t i o n s   u s i n g   S S L / H T T P S .   I n   t h i s   c a s e ,   o n l y   t h e   r e v e r s e   p r o x y   w o u l d   n e e d   t o   h a v e   S S L   c o n f i g u r e d .   C o m m u n i c a t i o n   b e t w e e n   t h e   r e v e r s e   p r o x y   s e r v e r   a n d   K e s t r e l   c o u l d   t a k e   p l a c e   o v e r   H T T P ,   a s   s h o w n   i n   F i g u r e   7 - 7 .     F i g u r e   7 - 7 .   A S P . N E T   C o r e   h o s t e d   b e h i n d   a n   H T T P S - s e c u r e d   r e v e r s e   p r o x y   s e r v e r   A n   i n c r e a s i n g l y   p o p u l a r   a p p r o a c h   i s   t o   h o s t   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n   i n   a   D o c k e r   c o n t a i n e r ,   w h i c h   t h e n   c a n   b e   h o s t e d   l o c a l l y   o r   d e p l o y e d   t o   A z u r e   f o r   c l o u d - b a s e d   h o s t i n g .   T h e   D o c k e r   c o n t a i n e r   Evaluation Warning: The document was created with Spire.PDF for .NET
    6 9         C h a p t e r   7           D e v e l o p i n g   A S P . N E T   C o r e   M V C   A p p s     c o u l d   c o n t a i n   y o u r   a p p l i c a t i o n   c o d e ,   r u n n i n g   o n   K e s t r e l ,   a n d   w o u l d   b e   d e p l o y e d   b e h i n d   a   r e v e r s e   p r o x y   s e r v e r ,   a s   s h o w n   a b o v e .   I f   y o u r e   h o s t i n g   y o u r   a p p l i c a t i o n   o n   A z u r e ,   y o u   c a n   u s e   M i c r o s o f t   A z u r e   A p p l i c a t i o n   G a t e w a y   a s   a   d e d i c a t e d   v i r t u a l   a p p l i a n c e   t o   p r o v i d e   s e v e r a l   s e r v i c e s .   I n   a d d i t i o n   t o   a c t i n g   a s   a   r e v e r s e   p r o x y   f o r   i n d i v i d u a l   a p p l i c a t i o n s ,   A p p l i c a t i o n   G a t e w a y   c a n   a l s o   o f f e r   t h e   f o l l o w i n g   f e a t u r e s :     H T T P   l o a d   b a l a n c i n g     S S L   o f f l o a d   ( S S L   o n l y   t o   I n t e r n e t )     E n d   t o   E n d   S S L     M u l t i - s i t e   r o u t i n g   ( c o n s o l i d a t e   u p   t o   2 0   s i t e s   o n   a   s i n g l e   A p p l i c a t i o n   G a t e w a y )     W e b   a p p l i c a t i o n   f i r e w a l l     W e b s o c k e t   s u p p o r t     A d v a n c e d   d i a g n o s t i c s   L e a r n   m o r e   a b o u t   A z u r e   d e p l o y m e n t   o p t i o n s   i n   C h a p t e r   1 0 .     R e f e r e n c e s     D e p l o y m e n t     H o s t i n g   a n d   D e p l o y m e n t   O v e r v i e w   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / p u b l i s h i n g /   W h e n   t o   u s e   K e s t r e l   w i t h   a   r e v e r s e   p r o x y   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / f u n d a m e n t a l s / s e r v e r s / k e s t r e l # w h e n - t o - u s e - k e s t r e l - w i t h - a - r e v e r s e - p r o x y   H o s t   A S P . N E T   C o r e   a p p s   i n   D o c k e r   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a s p n e t / c o r e / p u b l i s h i n g / d o c k e r     I n t r o d u c i n g   A z u r e   A p p l i c a t i o n   G a t e w a y   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / a p p l i c a t i o n - g a t e w a y / a p p l i c a t i o n - g a t e w a y - i n t r o d u c t i o n         Evaluation Warning: The document was created with Spire.PDF for .NET
              C h a p t e r   8           S E C T I O N       8     W o r k i n g   w i t h   D a t a   i n   A S P . N E T   C o r e   A p p s   D a t a   i s   a   p r e c i o u s   t h i n g   a n d   w i l l   l a s t   l o n g e r   t h a n   t h e   s y s t e m s   t h e m s e l v e s .   T i m   B e r n e r s - L e e     S u m m a r y   D a t a   a c c e s s   i s   a n   i m p o r t a n t   p a r t   o f   a l m o s t   a n y   s o f t w a r e   a p p l i c a t i o n .   A S P . N E T   C o r e   s u p p o r t s   a   v a r i e t y   o f   d a t a   a c c e s s   o p t i o n s ,   i n c l u d i n g   E n t i t y   F r a m e w o r k   C o r e   ( a n d   E n t i t y   F r a m e w o r k   6   a s   w e l l ) ,   a n d   c a n   w o r k   w i t h   a n y   . N E T   d a t a   a c c e s s   f r a m e w o r k .   T h e   c h o i c e   o f   w h i c h   d a t a   a c c e s s   f r a m e w o r k   t o   u s e   d e p e n d s   o n   t h e   a p p l i c a t i o n s   n e e d s .   A b s t r a c t i n g   t h e s e   c h o i c e s   f r o m   t h e   A p p l i c a t i o n C o r e   a n d   U I   p r o j e c t s ,   a n d   e n c a p s u l a t i n g   i m p l e m e n t a t i o n   d e t a i l s   i n   I n f r a s t r u c t u r e ,   h e l p s   t o   p r o d u c e   l o o s e l y   c o u p l e d ,   t e s t a b l e   s o f t w a r e .   E n t i t y   F r a m e w o r k   C o r e   ( f o r   r e l a t i o n a l   d a t a b a s e s )   I f   y o u r e   w r i t i n g   a   n e w   A S P . N E T   C o r e   a p p l i c a t i o n   t h a t   n e e d s   t o   w o r k   w i t h   r e l a t i o n a l   d a t a ,   t h e n   E n t i t y   F r a m e w o r k   C o r e   ( E F   C o r e )   i s   t h e   r e c o m m e n d e d   w a y   f o r   y o u r   a p p l i c a t i o n   t o   a c c e s s   i t s   d a t a .   E F   C o r e   i s   a n   o b j e c t - r e l a t i o n a l   m a p p e r   ( O / R M )   t h a t   e n a b l e s   . N E T   d e v e l o p e r s   t o   p e r s i s t   o b j e c t s   t o   a n d   f r o m   a   d a t a   s o u r c e .   I t   e l i m i n a t e s   t h e   n e e d   f o r   m o s t   o f   t h e   d a t a   a c c e s s   c o d e   d e v e l o p e r s   w o u l d   t y p i c a l l y   n e e d   t o   w r i t e .   L i k e   A S P . N E T   C o r e ,   E F   C o r e   h a s   b e e n   r e w r i t t e n   f r o m   t h e   g r o u n d   u p   t o   s u p p o r t   m o d u l a r   c r o s s - p l a t f o r m   a p p l i c a t i o n s .   Y o u   a d d   i t   t o   y o u r   a p p l i c a t i o n   a s   a   N u G e t   p a c k a g e ,   c o n f i g u r e   i t   i n   S t a r t u p ,   a n d   r e q u e s t   i t   t h r o u g h   d e p e n d e n c y   i n j e c t i o n   w h e r e v e r   y o u   n e e d   i t .   I f   y o u r e   u s i n g   A S P . N E T   C o r e   2 . 0   o r   g r e a t e r   a n d   y o u   h a v e   a   r e f e r e n c e   t o   t h e   M i c r o s o f t . A s p N e t C o r e . A l l   m e t a p a c k a g e ,   y o u   a l r e a d y   h a v e   r e f e r e n c e s   t o   E F   C o r e   a n d   i t s   S q l S e r v e r   a n d   I n M e m o r y   p a c k a g e s .   I f   y o u r e   n o t   u s i n g   t h i s   m e t a p a c k a g e ,   y o u   c a n   a d d   r e f e r e n c e s   t o   E n t i t y   F r a m e w o r k   C o r e   u s i n g   t h e   i n s t r u c t i o n s   b e l o w :   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 1         C h a p t e r   8           W o r k i n g   w i t h   D a t a     T o   u s e   E F   C o r e   w i t h   a   S Q L   S e r v e r   d a t a b a s e ,   r u n   t h e   f o l l o w i n g   d o t n e t   C L I   c o m m a n d :   d o t n e t   a d d   p a c k a g e   M i c r o s o f t . E n t i t y F r a m e w o r k C o r e . S q l S e r v e r   T o   a d d   s u p p o r t   f o r   a n   I n M e m o r y   d a t a   s o u r c e ,   f o r   t e s t i n g :   d o t n e t   a d d   p a c k a g e   M i c r o s o f t . E n t i t y F r a m e w o r k C o r e . I n M e m o r y   T h e   D b C o n t e x t   T o   w o r k   w i t h   E F   C o r e ,   y o u   n e e d   a   s u b c l a s s   o f   D b C o n t e x t .   T h i s   c l a s s   h o l d s   p r o p e r t i e s   r e p r e s e n t i n g   c o l l e c t i o n s   o f   t h e   e n t i t i e s   y o u r   a p p l i c a t i o n   w i l l   w o r k   w i t h .   T h e   e S h o p O n W e b   s a m p l e   i n c l u d e s   a   C a t a l o g C o n t e x t   w i t h   c o l l e c t i o n s   f o r   i t e m s ,   b r a n d s ,   a n d   t y p e s :     p u b l i c   c l a s s   C a t a l o g C o n t e x t   :   D b C o n t e x t   {           p u b l i c   C a t a l o g C o n t e x t ( D b C o n t e x t O p t i o n s < C a t a l o g C o n t e x t >   o p t i o n s )   :   b a s e ( o p t i o n s )           {           }           p u b l i c   D b S e t < C a t a l o G i t e m >   C a t a l o G i t e m s   {   g e t ;   s e t ;   }           p u b l i c   D b S e t < C a t a l o g B r a n d >   C a t a l o g B r a n d s   {   g e t ;   s e t ;   }           p u b l i c   D b S e t < C a t a l o g T y p e >   C a t a l o g T y p e s   {   g e t ;   s e t ;   }   }   Y o u r   D b C o n t e x t   m u s t   h a v e   a   c o n s t r u c t o r   t h a t   a c c e p t s   D b C o n t e x t O p t i o n s   a n d   p a s s   t h i s   a r g u m e n t   t o   t h e   b a s e   D b C o n t e x t   c o n s t r u c t o r .   N o t e   t h a t   i f   y o u   h a v e   o n l y   o n e   D b C o n t e x t   i n   y o u r   a p p l i c a t i o n ,   y o u   c a n   p a s s   a n   i n s t a n c e   o f   D b C o n t e x t O p t i o n s ,   b u t   i f   y o u   h a v e   m o r e   t h a n   o n e   y o u   m u s t   u s e   t h e   g e n e r i c   D b C o n t e x t O p t i o n s < T >   t y p e ,   p a s s i n g   i n   y o u r   D b C o n t e x t   t y p e   a s   t h e   g e n e r i c   p a r a m e t e r .   C o n f i g u r i n g   E F   C o r e   I n   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n ,   y o u l l   t y p i c a l l y   c o n f i g u r e   E F   C o r e   i n   y o u r   C o n f i g u r e S e r v i c e s   m e t h o d .   E F   C o r e   u s e s   a   D b C o n t e x t O p t i o n s B u i l d e r ,   w h i c h   s u p p o r t s   s e v e r a l   h e l p f u l   e x t e n s i o n   m e t h o d s   t o   s t r e a m l i n e   i t s   c o n f i g u r a t i o n .   T p   c o n f i g u r e   C a t a l o g C o n t e x t   t o   u s e   a   S Q L   S e r v e r   d a t a b a s e   w i t h   a   c o n n e c t i o n   s t r i n g   d e f i n e d   i n   C o n f i g u r a t i o n ,   y o u   w o u l d   a d d   t h e   f o l l o w i n g   c o d e   t o   C o n f i g u r e S e r v i c e s :   s e r v i c e s . A d d D b C o n t e x t < C a t a l o g C o n t e x t > ( o p t i o n s   = >   o p t i o n s . U s e S q l S e r v e r ( C o n f i g u r a t i o n . G e t C o n n e c t i o n S t r i n g ( " D e f a u l t C o n n e c t i o n " ) ) ) ;   T o   u s e   t h e   i n - m e m o r y   d a t a b a s e :   s e r v i c e s . A d d D b C o n t e x t < C a t a l o g C o n t e x t > ( o p t i o n s   = >           o p t i o n s . U s e I n M e m o r y D a t a b a s e ( C a t a l o g ) ) ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 2         C h a p t e r   8           W o r k i n g   w i t h   D a t a     Y o u   m u s t   s p e c i f y   a   n a m e   f o r   y o u r   i n - m e m o r y   d a t a b a s e .   T h i s   n a m e   s h o u l d   b e   u n i q u e   t o   i t s   a s s o c i a t e d   D b C o n t e x t .   O n c e   y o u   h a v e   i n s t a l l e d   E F   C o r e ,   c r e a t e d   a   D b C o n t e x t   c h i l d   t y p e ,   a n d   c o n f i g u r e d   i t   i n   C o n f i g u r e S e r v i c e s ,   y o u   a r e   r e a d y   t o   u s e   E F   C o r e .   Y o u   c a n   r e q u e s t   a n   i n s t a n c e   o f   y o u r   D b C o n t e x t   t y p e   i n   a n y   s e r v i c e   t h a t   n e e d s   i t   a n d   s t a r t   w o r k i n g   w i t h   y o u r   p e r s i s t e d   e n t i t i e s   u s i n g   L I N Q   a s   i f   t h e y   w e r e   s i m p l y   i n   a   c o l l e c t i o n .   E F   C o r e   d o e s   t h e   w o r k   o f   t r a n s l a t i n g   y o u r   L I N Q   e x p r e s s i o n s   i n t o   S Q L   q u e r i e s   t o   s t o r e   a n d   r e t r i e v e   y o u r   d a t a .   Y o u   c a n   s e e   t h e   q u e r i e s   E F   C o r e   i s   e x e c u t i n g   b y   c o n f i g u r i n g   a   l o g g e r   a n d   e n s u r i n g   i t s   l e v e l   i s   s e t   t o   a t   l e a s t   I n f o r m a t i o n ,   a s   s h o w n   i n   F i g u r e   8 - 1 .     F i g u r e   8 - 1 .   L o g g i n g   E F   C o r e   q u e r i e s   t o   t h e   c o n s o l e   Y o u   c a n   c o n f i g u r e   l o g g i n g   d u r i n g   d e v e l o p m e n t   i n   a   d e f a u l t   a p p   t e m p l a t e   b y   e d i t i n g   t h e   a p p s e t t i n g s - D e v e l o p m e n t . j s o n   f i l e .   F o r   e x a m p l e :   {       " L o g g i n g " :   {           " I n c l u d e S c o p e s " :   f a l s e ,           " L o g L e v e l " :   {               " D e f a u l t " :   " D e b u g " ,               " S y s t e m " :   " I n f o r m a t i o n " ,               " M i c r o s o f t " :   " I n f o r m a t i o n "           }       }   }   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 3         C h a p t e r   8           W o r k i n g   w i t h   D a t a     F e t c h i n g   a n d   S t o r i n g   D a t a   T o   r e t r i e v e   d a t a   f r o m   E F   C o r e ,   y o u   a c c e s s   t h e   a p p r o p r i a t e   p r o p e r t y   a n d   u s e   L I N Q   t o   f i l t e r   t h e   r e s u l t .   Y o u   c a n   a l s o   u s e   L I N Q   t o   p e r f o r m   p r o j e c t i o n ,   t r a n s f o r m i n g   t h e   r e s u l t   f r o m   o n e   t y p e   t o   a n o t h e r .   T h e   f o l l o w i n g   e x a m p l e   w o u l d   r e t r i e v e   C a t a l o g B r a n d s ,   o r d e r e d   b y   n a m e ,   f i l t e r e d   b y   t h e i r   E n a b l e d   p r o p e r t y ,   a n d   p r o j e c t e d   o n t o   a   S e l e c t L i s t I t e m   t y p e :   v a r   b r a n d I t e m s   =   a w a i t   _ c o n t e x t . C a t a l o g B r a n d s           . W h e r e ( b   = >   b . E n a b l e d )           . O r d e r B y ( b   = >   b . N a m e )           . S e l e c t ( b   = >   n e w   S e l e c t L i s t I t e m   {     V a l u e   =   b . I d ,   T e x t   =   b . N a m e   } )           . T o L i s t A s y n c ( ) ;   I t s   i m p o r t a n t   i n   t h e   a b o v e   e x a m p l e   t o   a d d   t h e   c a l l   t o   T o L i s t A s y n c   i n   o r d e r   t o   e x e c u t e   t h e   q u e r y   i m m e d i a t e l y .   O t h e r w i s e ,   t h e   s t a t e m e n t   w i l l   a s s i g n   a n   I Q u e r y a b l e < S e l e c t L i s t I t e m >   t o   b r a n d I t e m s ,   w h i c h   w i l l   n o t   b e   e x e c u t e d   u n t i l   i t   i s   e n u m e r a t e d .   T h e r e   a r e   p r o s   a n d   c o n s   t o   r e t u r n i n g   I Q u e r y a b l e   r e s u l t s   f r o m   m e t h o d s .   I t   a l l o w s   t h e   q u e r y   E F   C o r e   w i l l   c o n s t r u c t   t o   b e   f u r t h e r   m o d i f i e d ,   b u t   c a n   a l s o   r e s u l t   i n   e r r o r s   t h a t   o n l y   o c c u r   a t   r u n t i m e ,   i f   o p e r a t i o n s   a r e   a d d e d   t o   t h e   q u e r y   t h a t   E F   C o r e   c a n n o t   t r a n s l a t e .   I t s   g e n e r a l l y   s a f e r   t o   p a s s   a n y   f i l t e r s   i n t o   t h e   m e t h o d   p e r f o r m i n g   t h e   d a t a   a c c e s s ,   a n d   r e t u r n   b a c k   a n   i n - m e m o r y   c o l l e c t i o n   ( f o r   e x a m p l e ,   L i s t < T > )   a s   t h e   r e s u l t .   T h e s e   f i l t e r s   c a n   b e   f u r t h e r   e n c a p s u l a t e d   b y   u s i n g   t h e   S p e c i f i c a t i o n   p a t t e r n .   E F   C o r e   t r a c k s   c h a n g e s   o n   e n t i t i e s   i t   f e t c h e s   f r o m   p e r s i s t e n c e .   T o   s a v e   c h a n g e s   t o   a   t r a c k e d   e n t i t y ,   y o u   j u s t   c a l l   t h e   S a v e C h a n g e s   m e t h o d   o n   t h e   D b C o n t e x t ,   m a k i n g   s u r e   i t s   t h e   s a m e   D b C o n t e x t   i n s t a n c e   t h a t   w a s   u s e d   t o   f e t c h   t h e   e n t i t y .   A d d i n g   a n d   r e m o v i n g   e n t i t i e s   i s   d o n e   d i r e c t l y   o n   t h e   a p p r o p r i a t e   D b S e t   p r o p e r t y ,   a g a i n   w i t h   a   c a l l   t o   S a v e C h a n g e s   t o   e x e c u t e   t h e   d a t a b a s e   c o m m a n d s .   T h e   f o l l o w i n g   e x a m p l e   d e m o n s t r a t e s   a d d i n g ,   u p d a t i n g ,   a n d   r e m o v i n g   e n t i t i e s   f r o m   p e r s i s t e n c e .   / /   c r e a t e   v a r   n e w B r a n d   =   n e w   C a t a l o g B r a n d ( )   {   B r a n d   =   " A c m e "   } ;   _ c o n t e x t . A d d ( n e w B r a n d ) ;   a w a i t   _ c o n t e x t . S a v e C h a n g e s A s y n c ( ) ;     / /   r e a d   a n d   u p d a t e   v a r   e x i s t i n g B r a n d   =   _ c o n t e x t . C a t a l o g B r a n d s . F i n d ( 1 ) ;   e x i s t i n g B r a n d . B r a n d   =   " U p d a t e d   B r a n d " ;   a w a i t   _ c o n t e x t . S a v e C h a n g e s A s y n c ( ) ;     / /   r e a d   a n d   d e l e t e   ( a l t e r n a t e   F i n d   s y n t a x )   v a r   b r a n d T o D e l e t e   =   _ c o n t e x t . F i n d < C a t a l o g B r a n d > ( 2 ) ;   _ c o n t e x t . C a t a l o g B r a n d s . R e m o v e ( b r a n d T o D e l e t e ) ;   a w a i t   _ c o n t e x t . S a v e C h a n g e s A s y n c ( ) ;   E F   C o r e   s u p p o r t s   b o t h   s y n c h r o n o u s   a n d   a s y n c   m e t h o d s   f o r   f e t c h i n g   a n d   s a v i n g .   I n   w e b   a p p l i c a t i o n s ,   i t s   r e c o m m e n d e d   t o   u s e   t h e   a s y n c / a w a i t   p a t t e r n   w i t h   t h e   a s y n c   m e t h o d s ,   s o   t h a t   w e b   s e r v e r   t h r e a d s   a r e   n o t   b l o c k e d   w h i l e   w a i t i n g   f o r   d a t a   a c c e s s   o p e r a t i o n s   t o   c o m p l e t e .   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 4         C h a p t e r   8           W o r k i n g   w i t h   D a t a     F e t c h i n g   R e l a t e d   D a t a   W h e n   E F   C o r e   r e t r i e v e s   e n t i t i e s ,   i t   p o p u l a t e s   a l l   o f   t h e   p r o p e r t i e s   t h a t   a r e   s t o r e d   d i r e c t l y   w i t h   t h a t   e n t i t y   i n   t h e   d a t a b a s e .   N a v i g a t i o n   p r o p e r t i e s ,   s u c h   a s   l i s t s   o f   r e l a t e d   e n t i t i e s ,   a r e   n o t   p o p u l a t e d   a n d   m a y   h a v e   t h e i r   v a l u e   s e t   t o   n u l l .   T h i s   e n s u r e s   E F   C o r e   i s   n o t   f e t c h i n g   m o r e   d a t a   t h a n   i s   n e e d e d ,   w h i c h   i s   e s p e c i a l l y   i m p o r t a n t   f o r   w e b   a p p l i c a t i o n s ,   w h i c h   m u s t   q u i c k l y   p r o c e s s   r e q u e s t s   a n d   r e t u r n   r e s p o n s e s   i n   a n   e f f i c i e n t   m a n n e r .   T o   i n c l u d e   r e l a t i o n s h i p s   w i t h   a n   e n t i t y   u s i n g   e a g e r   l o a d i n g ,   y o u   s p e c i f y   t h e   p r o p e r t y   u s i n g   t h e   I n c l u d e   e x t e n s i o n   m e t h o d   o n   t h e   q u e r y ,   a s   s h o w n :   / /   . I n c l u d e   r e q u i r e s   u s i n g   M i c r o s o f t . E n t i t y F r a m e w o r k C o r e   v a r   b r a n d s W i t h I t e m s   =   a w a i t   _ c o n t e x t . C a t a l o g B r a n d s           . I n c l u d e ( b   = >   b . I t e m s )           . T o L i s t A s y n c ( ) ;   Y o u   c a n   i n c l u d e   m u l t i p l e   r e l a t i o n s h i p s ,   a n d   y o u   c a n   a l s o   i n c l u d e   s u b - r e l a t i o n s h i p s   u s i n g   T h e n I n c l u d e .   E F   C o r e   w i l l   e x e c u t e   a   s i n g l e   q u e r y   t o   r e t r i e v e   t h e   r e s u l t i n g   s e t   o f   e n t i t i e s .   I n   a d d i t i o n   t o   e n c a p s u l a t i n g   f i l t e r i n g   l o g i c ,   s p e c i f i c a t i o n   c a n   s p e c i f y   t h e   s h a p e   o f   t h e   d a t a   t o   b e   r e t u r n e d ,   i n c l u d i n g   w h i c h   p r o p e r t i e s   t o   p o p u l a t e .   T h e   e S h o p O n W e b   s a m p l e   i n c l u d e s   s e v e r a l   s p e c i f i c a t i o n s   t h a t   d e m o n s t r a t e   e n c a p s u l a t i n g   e a g e r   l o a d i n g   i n f o r m a t i o n   w i t h i n   t h e   s p e c i f i c a t i o n .   Y o u   c a n   s e e   h o w   t h e   s p e c i f i c a t i o n   i s   u s e d   a s   p a r t   o f   a   q u e r y   h e r e :   p u b l i c   I E n u m e r a b l e < T >   L i s t ( I S p e c i f i c a t i o n < T >   s p e c )   {           / /   f e t c h   a   Q u e r y a b l e   t h a t   i n c l u d e s   a l l   e x p r e s s i o n - b a s e d   i n c l u d e s           v a r   q u e r y a b l e R e s u l t W i t h I n c l u d e s   =   s p e c . I n c l u d e s                   . A g g r e g a t e ( _ d b C o n t e x t . S e t < T > ( ) . A s Q u e r y a b l e ( ) ,                           ( c u r r e n t ,   i n c l u d e )   = >   c u r r e n t . I n c l u d e ( i n c l u d e ) ) ;             / /   m o d i f y   t h e   I Q u e r y a b l e   t o   i n c l u d e   a n y   s t r i n g - b a s e d   i n c l u d e   s t a t e m e n t s           v a r   s e c o n d a r y R e s u l t   =   s p e c . I n c l u d e S t r i n g s                   . A g g r e g a t e ( q u e r y a b l e R e s u l t W i t h I n c l u d e s ,                           ( c u r r e n t ,   i n c l u d e )   = >   c u r r e n t . I n c l u d e ( i n c l u d e ) ) ;             / /   r e t u r n   t h e   r e s u l t   o f   t h e   q u e r y   u s i n g   t h e   s p e c i f i c a t i o n ' s   c r i t e r i a   e x p r e s s i o n           r e t u r n   s e c o n d a r y R e s u l t                                   . W h e r e ( s p e c . C r i t e r i a )                                   . A s E n u m e r a b l e ( ) ;   }   A n o t h e r   o p t i o n   f o r   l o a d i n g   r e l a t e d   d a t a   i s   t o   u s e   e x p l i c i t   l o a d i n g .   E x p l i c i t   l o a d i n g   a l l o w s   y o u   t o   l o a d   a d d i t i o n a l   d a t a   i n t o   a n   e n t i t y   t h a t   h a s   a l r e a d y   b e e n   r e t r i e v e d .   S i n c e   t h i s   i n v o l v e s   a   s e p a r a t e   r e q u e s t   t o   t h e   d a t a b a s e ,   i t s   n o t   r e c o m m e n d e d   f o r   w e b   a p p l i c a t i o n s ,   w h i c h   s h o u l d   m i n i m i z e   t h e   n u m b e r   o f   d a t a b a s e   r o u n d   t r i p s   m a d e   p e r   r e q u e s t .   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 5         C h a p t e r   8           W o r k i n g   w i t h   D a t a     L a z y   l o a d i n g   i s   a   f e a t u r e   t h a t   a u t o m a t i c a l l y   l o a d s   r e l a t e d   d a t a   a s   i t   i s   r e f e r e n c e d   b y   t h e   a p p l i c a t i o n .   E F   C o r e   h a s   a d d e d   s u p p o r t   f o r   l a z y   l o a d i n g   i n   v e r s i o n   2 . 1 .   L a z y   l o a d i n g   i s   n o t   e n a b l e d   b y   d e f a u l t   a n d   r e q u i r e s   i n s t a l l i n g   t h e   ` M i c r o s o f t . E n t i t y F r a m e w o r k C o r e . P r o x i e s `   p a c k a g e .   A s   w i t h   e x p l i c i t   l o a d i n g ,   l a z y   l o a d i n g   s h o u l d   t y p i c a l l y   b e   a v o i d e d   f o r   w e b   a p p l i c a t i o n s .   E n c a p s u l a t i n g   D a t a   E n t i t y   F r a m e w o r k   C o r e   s u p p o r t s   s e v e r a l   f e a t u r e s   t h a t   a l l o w   y o u r   m o d e l   t o   p r o p e r l y   e n c a p s u l a t e   i t s   s t a t e .   A   c o m m o n   p r o b l e m   i n   d o m a i n   m o d e l s   i s   t h a t   t h e y   e x p o s e   c o l l e c t i o n   n a v i g a t i o n   p r o p e r t i e s   a s   p u b l i c l y   a c c e s s i b l e   l i s t   t y p e s .   T h i s   a l l o w s   a n y   c o l l a b o r a t o r   t o   m a n i p u l a t e   t h e   c o n t e n t s   o f   t h e s e   c o l l e c t i o n   t y p e s ,   w h i c h   m a y   b y p a s s   i m p o r t a n t   b u s i n e s s   r u l e s   r e l a t e d   t o   t h e   c o l l e c t i o n ,   p o s s i b l y   l e a v i n g   t h e   o b j e c t   i n   a n   i n v a l i d   s t a t e .   T h e   s o l u t i o n   t o   t h i s   i s   t o   e x p o s e   r e a d - o n l y   a c c e s s   t o   r e l a t e d   c o l l e c t i o n s ,   a n d   e x p l i c i t l y   p r o v i d e   m e t h o d s   d e f i n i n g   w a y s   i n   w h i c h   c l i e n t s   c a n   m a n i p u l a t e   t h e m ,   a s   i n   t h i s   e x a m p l e :   p u b l i c   c l a s s   B a s k e t   :   B a s e E n t i t y   {           p u b l i c   s t r i n g   B u y e r I d   {   g e t ;   s e t ;   }           p r i v a t e   r e a d o n l y   L i s t < B a s k e t I t e m >   _ i t e m s   =   n e w   L i s t < B a s k e t I t e m > ( ) ;           p u b l i c   I R e a d O n l y C o l l e c t i o n < B a s k e t I t e m >   I t e m s   = >   _ i t e m s . A s R e a d O n l y ( ) ;             p u b l i c   v o i d   A d d I t e m ( i n t   c a t a l o G i t e m I d ,   d e c i m a l   u n i t P r i c e ,   i n t   q u a n t i t y   =   1 )           {                   i f   ( ! I t e m s . A n y ( i   = >   i . C a t a l o G i t e m I d   = =   c a t a l o G i t e m I d ) )                   {                           _ i t e m s . A d d ( n e w   B a s k e t I t e m ( )                           {                                   C a t a l o G i t e m I d   =   c a t a l o G i t e m I d ,                                   Q u a n t i t y   =   q u a n t i t y ,                                   U n i t P r i c e   =   u n i t P r i c e                           } ) ;                           r e t u r n ;                   }                   v a r   e x i s t i n G i t e m   =   I t e m s . F i r s t O r D e f a u l t ( i   = >   i . C a t a l o G i t e m I d   = =   c a t a l o G i t e m I d ) ;                   e x i s t i n G i t e m . Q u a n t i t y   + =   q u a n t i t y ;           }   }   N o t e   t h a t   t h i s   e n t i t y   t y p e   d o e s n t   e x p o s e   a   p u b l i c   L i s t   o r   I C o l l e c t i o n   p r o p e r t y ,   b u t   i n s t e a d   e x p o s e s   a n   I R e a d O n l y C o l l e c t i o n   t y p e   t h a t   w r a p s   t h e   u n d e r l y i n g   L i s t   t y p e .   W h e n   u s i n g   t h i s   p a t t e r n ,   y o u   c a n   i n d i c a t e   t o   E n t i t y   F r a m e w o r k   C o r e   t o   u s e   t h e   b a c k i n g   f i e l d   l i k e   s o :   p r i v a t e   v o i d   C o n f i g u r e B a s k e t ( E n t i t y T y p e B u i l d e r < B a s k e t >   b u i l d e r )   {   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 6         C h a p t e r   8           W o r k i n g   w i t h   D a t a             v a r   n a v i g a t i o n   =   b u i l d e r . M e t a d a t a . F i n d N a v i g a t i o n ( n a m e o f ( B a s k e t . I t e m s ) ) ;             n a v i g a t i o n . S e t P r o p e r t y A c c e s s M o d e ( P r o p e r t y A c c e s s M o d e . F i e l d ) ;   }   A n o t h e r   w a y   i n   w h i c h   y o u   c a n   i m p r o v e   y o u r   d o m a i n   m o d e l   i s   t h r o u g h   t h e   u s e   o f   v a l u e   o b j e c t s   f o r   t y p e s   t h a t   l a c k   i d e n t i t y   a n d   a r e   o n l y   d i s t i n g u i s h e d   b y   t h e i r   p r o p e r t i e s .   U s i n g   s u c h   t y p e s   a s   p r o p e r t i e s   o f   y o u r   e n t i t i e s   c a n   h e l p   k e e p   l o g i c   s p e c i f i c   t o   t h e   v a l u e   o b j e c t   w h e r e   i t   b e l o n g s ,   a n d   c a n   a v o i d   d u p l i c a t e   l o g i c   b e t w e e n   m u l t i p l e   e n t i t i e s   t h a t   u s e   t h e   s a m e   c o n c e p t .   I n   E n t i t y   F r a m e w o r k   C o r e ,   y o u   c a n   p e r s i s t   v a l u e   o b j e c t s   i n   t h e   s a m e   t a b l e   a s   t h e i r   o w n i n g   e n t i t y   b y   c o n f i g u r i n g   t h e   t y p e   a s   a n   o w n e d   e n t i t y ,   l i k e   s o :   p r i v a t e   v o i d   C o n f i g u r e O r d e r ( E n t i t y T y p e B u i l d e r < O r d e r >   b u i l d e r )   {           b u i l d e r . O w n s O n e ( o   = >   o . S h i p T o A d d r e s s ) ;   }   I n   t h i s   e x a m p l e ,   t h e   S h i p T o A d d r e s s   p r o p e r t y   i s   o f   t y p e   A d d r e s s .   A d d r e s s   i s   a   v a l u e   o b j e c t   w i t h   s e v e r a l   p r o p e r t i e s   ( S t r e e t ,   C i t y ,   e t c . ) .   E F   C o r e   w i l l   m a p   t h e   O r d e r   o b j e c t   t o   i t s   t a b l e   w i t h   o n e   c o l u m n   p e r   A d d r e s s   p r o p e r t y ,   p r e f i x i n g   e a c h   c o l u m n   n a m e   w i t h   t h e   n a m e   o f   t h e   p r o p e r t y .   F o r   e x a m p l e ,   t h e   O r d e r   t a b l e   i n   t h i s   c a s e   w o u l d   i n c l u d e   c o l u m n s   S h i p T o A d d r e s s _ S t r e e t ,   S h i p T o A d d r e s s _ C i t y ,   e t c .   R e s i l i e n t   C o n n e c t i o n s   E x t e r n a l   r e s o u r c e s   l i k e   S Q L   d a t a b a s e s   m a y   o c c a s i o n a l l y   b e   u n a v a i l a b l e .   I n   c a s e s   o f   t e m p o r a r y   u n a v a i l a b i l i t y ,   a p p l i c a t i o n s   c a n   u s e   r e t r y   l o g i c   t o   a v o i d   r a i s i n g   a n   e x c e p t i o n .   T h i s   t e c h n i q u e   i s   c o m m o n l y   r e f e r r e d   t o   a s   c o n n e c t i o n   r e s i l i e n c y .   Y o u   c a n   i m p l e m e n t   y o u r   o w n   r e t r y   w i t h   e x p o n e n t i a l   b a c k o f f   t e c h n i q u e   b y   a t t e m p t i n g   t o   r e t r y   w i t h   a n   e x p o n e n t i a l l y   i n c r e a s i n g   w a i t   t i m e ,   u n t i l   a   m a x i m u m   r e t r y   c o u n t   h a s   b e e n   r e a c h e d .   T h i s   t e c h n i q u e   e m b r a c e s   t h e   f a c t   t h a t   c l o u d   r e s o u r c e s   m i g h t   i n t e r m i t t e n t l y   b e   u n a v a i l a b l e   f o r   s h o r t   p e r i o d s   o f   t i m e ,   r e s u l t i n g   i n   f a i l u r e   o f   s o m e   r e q u e s t s .   F o r   A z u r e   S Q L   D B ,   E n t i t y   F r a m e w o r k   C o r e   a l r e a d y   p r o v i d e s   i n t e r n a l   d a t a b a s e   c o n n e c t i o n   r e s i l i e n c y   a n d   r e t r y   l o g i c .   B u t   y o u   n e e d   t o   e n a b l e   t h e   E n t i t y   F r a m e w o r k   e x e c u t i o n   s t r a t e g y   f o r   e a c h   D b C o n t e x t   c o n n e c t i o n   i f   y o u   w a n t   t o   h a v e   r e s i l i e n t   E F   C o r e   c o n n e c t i o n s .   F o r   i n s t a n c e ,   t h e   f o l l o w i n g   c o d e   a t   t h e   E F   C o r e   c o n n e c t i o n   l e v e l   e n a b l e s   r e s i l i e n t   S Q L   c o n n e c t i o n s   t h a t   a r e   r e t r i e d   i f   t h e   c o n n e c t i o n   f a i l s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 7         C h a p t e r   8           W o r k i n g   w i t h   D a t a     / /   S t a r t u p . c s   f r o m   a n y   A S P . N E T   C o r e   W e b   A P I     p u b l i c   c l a s s   S t a r t u p     {         p u b l i c   I S e r v i c e P r o v i d e r   C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n   s e r v i c e s )         {             / / . . .             s e r v i c e s . A d d D b C o n t e x t < O r d e r i n g C o n t e x t > ( o p t i o n s   = >             {                 o p t i o n s . U s e S q l S e r v e r ( C o n f i g u r a t i o n [ " C o n n e c t i o n S t r i n g " ] ,                 s q l S e r v e r O p t i o n s A c t i o n :   s q l O p t i o n s   = >                 {                     s q l O p t i o n s . E n a b l e R e t r y O n F a i l u r e (                     m a x R e t r y C o u n t :   5 ,                     m a x R e t r y D e l a y :   T i m e S p a n . F r o m S e c o n d s ( 3 0 ) ,                     e r r o r N u m b e r s T o A d d :   n u l l ) ;                 } ) ;             } ) ;         }     / / . . .       E x e c u t i o n   s t r a t e g i e s   a n d   e x p l i c i t   t r a n s a c t i o n s   u s i n g   B e g i n T r a n s a c t i o n   a n d   m u l t i p l e   D b C o n t e x t s     W h e n   r e t r i e s   a r e   e n a b l e d   i n   E F   C o r e   c o n n e c t i o n s ,   e a c h   o p e r a t i o n   y o u   p e r f o r m   u s i n g   E F   C o r e   b e c o m e s   i t s   o w n   r e t r i a b l e   o p e r a t i o n .   E a c h   q u e r y   a n d   e a c h   c a l l   t o   S a v e C h a n g e s   w i l l   b e   r e t r i e d   a s   a   u n i t   i f   a   t r a n s i e n t   f a i l u r e   o c c u r s .     H o w e v e r ,   i f   y o u r   c o d e   i n i t i a t e s   a   t r a n s a c t i o n   u s i n g   B e g i n T r a n s a c t i o n ,   y o u   a r e   d e f i n i n g   y o u r   o w n   g r o u p   o f   o p e r a t i o n s   t h a t   n e e d   t o   b e   t r e a t e d   a s   a   u n i t e v e r y t h i n g   i n s i d e   t h e   t r a n s a c t i o n   h a s   b e   r o l l e d   b a c k   i f   a   f a i l u r e   o c c u r s .   Y o u   w i l l   s e e   a n   e x c e p t i o n   l i k e   t h e   f o l l o w i n g   i f   y o u   a t t e m p t   t o   e x e c u t e   t h a t   t r a n s a c t i o n   w h e n   u s i n g   a n   E F   e x e c u t i o n   s t r a t e g y   ( r e t r y   p o l i c y )   a n d   y o u   i n c l u d e   s e v e r a l   S a v e C h a n g e s   f r o m   m u l t i p l e   D b C o n t e x t s   i n   i t .   S y s t e m . I n v a l i d O p e r a t i o n E x c e p t i o n :   T h e   c o n f i g u r e d   e x e c u t i o n   s t r a t e g y   ' S q l S e r v e r R e t r y i n g E x e c u t i o n S t r a t e g y '   d o e s   n o t   s u p p o r t   u s e r   i n i t i a t e d   t r a n s a c t i o n s .   U s e   t h e   e x e c u t i o n   s t r a t e g y   r e t u r n e d   b y   ' D b C o n t e x t . D a t a b a s e . C r e a t e E x e c u t i o n S t r a t e g y ( ) '   t o   e x e c u t e   a l l   t h e   o p e r a t i o n s   i n   t h e   t r a n s a c t i o n   a s   a   r e t r i a b l e   u n i t .       T h e   s o l u t i o n   i s   t o   m a n u a l l y   i n v o k e   t h e   E F   e x e c u t i o n   s t r a t e g y   w i t h   a   d e l e g a t e   r e p r e s e n t i n g   e v e r y t h i n g   t h a t   n e e d s   t o   b e   e x e c u t e d .   I f   a   t r a n s i e n t   f a i l u r e   o c c u r s ,   t h e   e x e c u t i o n   s t r a t e g y   w i l l   i n v o k e   t h e   d e l e g a t e   a g a i n .   T h e   f o l l o w i n g   c o d e   s h o w s   h o w   t o   i m p l e m e n t   t h i s   a p p r o a c h :   / /   U s e   o f   a n   E F   C o r e   r e s i l i e n c y   s t r a t e g y   w h e n   u s i n g   m u l t i p l e   D b C o n t e x t s     / /   w i t h i n   a n   e x p l i c i t   t r a n s a c t i o n     Evaluation Warning: The document was created with Spire.PDF for .NET
    7 8         C h a p t e r   8           W o r k i n g   w i t h   D a t a     / /   S e e :     / /   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / e f / c o r e / m i s c e l l a n e o u s / c o n n e c t i o n - r e s i l i e n c y     v a r   s t r a t e g y   =   _ c a t a l o g C o n t e x t . D a t a b a s e . C r e a t e E x e c u t i o n S t r a t e g y ( ) ;     a w a i t   s t r a t e g y . E x e c u t e A s y n c ( a s y n c   ( )   = >     {     / /   A c h i e v i n g   a t o m i c i t y   b e t w e e n   o r i g i n a l   C a t a l o g   d a t a b a s e   o p e r a t i o n   a n d   t h e     / /   I n t e g r a t i o n E v e n t L o g   t h a n k s   t o   a   l o c a l   t r a n s a c t i o n     u s i n g   ( v a r   t r a n s a c t i o n   =   _ c a t a l o g C o n t e x t . D a t a b a s e . B e g i n T r a n s a c t i o n ( ) )     {     _ c a t a l o g C o n t e x t . C a t a l o g I t e m s . U p d a t e ( c a t a l o G i t e m ) ;     a w a i t   _ c a t a l o g C o n t e x t . S a v e C h a n g e s A s y n c ( ) ;     / /   S a v e   t o   E v e n t L o g   o n l y   i f   p r o d u c t   p r i c e   c h a n g e d     i f   ( r a i s e P r o d u c t P r i c e C h a n g e d E v e n t )   {   a w a i t   _ i n t e g r a t i o n E v e n t L o g S e r v i c e . S a v e E v e n t A s y n c ( p r i c e C h a n g e d E v e n t ) ;     }   t r a n s a c t i o n . C o m m i t ( ) ;     }     } ) ;     T h e   f i r s t   D b C o n t e x t   i s   t h e   _ c a t a l o g C o n t e x t   a n d   t h e   s e c o n d   D b C o n t e x t   i s   w i t h i n   t h e   _ i n t e g r a t i o n E v e n t L o g S e r v i c e   o b j e c t .   F i n a l l y ,   t h e   C o m m i t   a c t i o n   w o u l d   b e   p e r f o r m e d   m u l t i p l e   D b C o n t e x t s   a n d   u s i n g   a n   E F   E x e c u t i o n   S t r a t e g y .   R e f e r e n c e s     E n t i t y   F r a m e w o r k   C o r e     E F   C o r e   D o c s   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / e f /   E F   C o r e :   R e l a t e d   D a t a   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / e f / c o r e / q u e r y i n g / r e l a t e d - d a t a   A v o i d   L a z y   L o a d i n g   E n t i t i e s   i n   A S P . N E T   A p p l i c a t i o n s   h t t p : / / a r d a l i s . c o m / a v o i d - l a z y - l o a d i n g - e n t i t i e s - i n - a s p - n e t - a p p l i c a t i o n s       E F   C o r e   o r   m i c r o - O R M ?   W h i l e   E F   C o r e   i s   a   g r e a t   c h o i c e   f o r   m a n a g i n g   p e r s i s t e n c e ,   a n d   f o r   t h e   m o s t   p a r t   e n c a p s u l a t e s   d a t a b a s e   d e t a i l s   f r o m   a p p l i c a t i o n   d e v e l o p e r s ,   i t   i s   n o t   t h e   o n l y   c h o i c e .   A n o t h e r   p o p u l a r   o p e n   s o u r c e   a l t e r n a t i v e   i s   D a p p e r ,   a   s o - c a l l e d   m i c r o - O R M .   A   m i c r o - O R M   i s   a   l i g h t w e i g h t ,   l e s s   f u l l - f e a t u r e d   t o o l   f o r   m a p p i n g   o b j e c t s   t o   d a t a   s t r u c t u r e s .   I n   t h e   c a s e   o f   D a p p e r ,   i t s   d e s i g n   g o a l s   f o c u s   o n   p e r f o r m a n c e ,   r a t h e r   t h a n   f u l l y   e n c a p s u l a t i n g   t h e   u n d e r l y i n g   q u e r i e s   i t   u s e s   t o   r e t r i e v e   a n d   u p d a t e   d a t a .   B e c a u s e   i t   d o e s n t   a b s t r a c t   S Q L   f r o m   t h e   d e v e l o p e r ,   D a p p e r   i s   c l o s e r   t o   t h e   m e t a l   a n d   l e t s   d e v e l o p e r s   w r i t e   t h e   e x a c t   q u e r i e s   t h e y   w a n t   t o   u s e   f o r   a   g i v e n   d a t a   a c c e s s   o p e r a t i o n .   E F   C o r e   h a s   t w o   s i g n i f i c a n t   f e a t u r e s   i t   p r o v i d e s   w h i c h   s e p a r a t e   i t   f r o m   D a p p e r   b u t   a l s o   a d d   t o   i t s   p e r f o r m a n c e   o v e r h e a d .   T h e   f i r s t   i s   t r a n s l a t i o n   f r o m   L I N Q   e x p r e s s i o n s   i n t o   S Q L .   T h e s e   t r a n s l a t i o n s   a r e   Evaluation Warning: The document was created with Spire.PDF for .NET
    7 9         C h a p t e r   8           W o r k i n g   w i t h   D a t a     c a c h e d ,   b u t   e v e n   s o   t h e r e   i s   o v e r h e a d   i n   p e r f o r m i n g   t h e m   t h e   f i r s t   t i m e .   T h e   s e c o n d   i s   c h a n g e   t r a c k i n g   o n   e n t i t i e s   ( s o   t h a t   e f f i c i e n t   u p d a t e   s t a t e m e n t s   c a n   b e   g e n e r a t e d ) .   T h i s   b e h a v i o r   c a n   b e   t u r n e d   o f f   f o r   s p e c i f i c   q u e r i e s   b y   u s i n g   t h e   A s N o T r a c k i n g   e x t e n s i o n .   E F   C o r e   a l s o   g e n e r a t e s   S Q L   q u e r i e s   t h a t   u s u a l l y   a r e   v e r y   e f f i c i e n t   a n d   i n   a n y   c a s e   p e r f e c t l y   a c c e p t a b l e   f r o m   a   p e r f o r m a n c e   s t a n d p o i n t ,   b u t   i f   y o u   n e e d   f i n e   c o n t r o l   o v e r   t h e   p r e c i s e   q u e r y   t o   b e   e x e c u t e d ,   y o u   c a n   p a s s   i n   c u s t o m   S Q L   ( o r   e x e c u t e   a   s t o r e d   p r o c e d u r e )   u s i n g   E F   C o r e ,   t o o .   I n   t h i s   c a s e ,   D a p p e r   s t i l l   o u t p e r f o r m s   E F   C o r e ,   b u t   o n l y   s l i g h t l y .   J u l i e   L e r m a n   p r e s e n t s   s o m e   p e r f o r m a n c e   d a t a   i n   h e r   M a y   2 0 1 6   M S D N   a r t i c l e   D a p p e r ,   E n t i t y   F r a m e w o r k ,   a n d   H y b r i d   A p p s .   A d d i t i o n a l   p e r f o r m a n c e   b e n c h m a r k   d a t a   f o r   a   v a r i e t y   o f   d a t a   a c c e s s   m e t h o d s   c a n   b e   f o u n d   o n   t h e   D a p p e r   s i t e .   T o   s e e   h o w   t h e   s y n t a x   f o r   D a p p e r   v a r i e s   f r o m   E F   C o r e ,   c o n s i d e r   t h e s e   t w o   v e r s i o n s   o f   t h e   s a m e   m e t h o d   f o r   r e t r i e v i n g   a   l i s t   o f   i t e m s :   / /   E F   C o r e   p r i v a t e   r e a d o n l y   C a t a l o g C o n t e x t   _ c o n t e x t ;   p u b l i c   a s y n c   T a s k < I E n u m e r a b l e < C a t a l o g T y p e > >   G e t C a t a l o g T y p e s ( )   {           r e t u r n   a w a i t   _ c o n t e x t . C a t a l o g T y p e s . T o L i s t A s y n c ( ) ;   }     / /   D a p p e r   p r i v a t e   r e a d o n l y   S q l C o n n e c t i o n   _ c o n n ;   p u b l i c   a s y n c   T a s k < I E n u m e r a b l e < C a t a l o g T y p e > >   G e t C a t a l o g T y p e s W i t h D a p p e r ( )   {           r e t u r n   a w a i t   _ c o n n . Q u e r y A s y n c < C a t a l o g T y p e > ( " S E L E C T   *   F R O M   C a t a l o g T y p e " ) ;   }   I f   y o u   n e e d   t o   b u i l d   m o r e   c o m p l e x   o b j e c t   g r a p h s   w i t h   D a p p e r ,   y o u   n e e d   t o   w r i t e   t h e   a s s o c i a t e d   q u e r i e s   y o u r s e l f   ( a s   o p p o s e d   t o   a d d i n g   a n   I n c l u d e   a s   y o u   w o u l d   i n   E F   C o r e ) .   T h i s   i s   s u p p o r t e d   t h r o u g h   a   v a r i e t y   o f   s y n t a x e s ,   i n c l u d i n g   a   f e a t u r e   c a l l e d   M u l t i   M a p p i n g   t h a t   l e t s   y o u   m a p   i n d i v i d u a l   r o w s   t o   m u l t i p l e   m a p p e d   o b j e c t s .   F o r   e x a m p l e ,   g i v e n   a   c l a s s   P o s t   w i t h   a   p r o p e r t y   O w n e r   o f   t y p e   U s e r ,   t h e   f o l l o w i n g   S Q L   w o u l d   r e t u r n   a l l   t h e   n e c e s s a r y   d a t a :   s e l e c t   *   f r o m   # P o s t s   p     l e f t   j o i n   # U s e r s   u   o n   u . I d   =   p . O w n e r I d     O r d e r   b y   p . I d   E a c h   r e t u r n e d   r o w   i n c l u d e s   b o t h   U s e r   a n d   P o s t   d a t a .   S i n c e   t h e   U s e r   d a t a   s h o u l d   b e   a t t a c h e d   t o   t h e   P o s t   d a t a   v i a   i t s   O w n e r   p r o p e r t y ,   t h e   f o l l o w i n g   f u n c t i o n   i s   u s e d :   ( p o s t ,   u s e r )   = >   {   p o s t . O w n e r   =   u s e r ;   r e t u r n   p o s t ;   }   T h e   f u l l   c o d e   l i s t i n g   t o   r e t u r n   a   c o l l e c t i o n   o f   p o s t s   w i t h   t h e i r   O w n e r   p r o p e r t y   p o p u l a t e d   w i t h   t h e   a s s o c i a t e d   u s e r   d a t a   w o u l d   b e :   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 0         C h a p t e r   8           W o r k i n g   w i t h   D a t a     v a r   s q l   =   @ " s e l e c t   *   f r o m   # P o s t s   p     l e f t   j o i n   # U s e r s   u   o n   u . I d   =   p . O w n e r I d     O r d e r   b y   p . I d " ;   v a r   d a t a   =   c o n n e c t i o n . Q u e r y < P o s t ,   U s e r ,   P o s t > ( s q l ,         ( p o s t ,   u s e r )   = >   {   p o s t . O w n e r   =   u s e r ;   r e t u r n   p o s t ; } ) ;   B e c a u s e   i t   o f f e r s   l e s s   e n c a p s u l a t i o n ,   D a p p e r   r e q u i r e s   d e v e l o p e r s   k n o w   m o r e   a b o u t   h o w   t h e i r   d a t a   i s   s t o r e d ,   h o w   t o   q u e r y   i t   e f f i c i e n t l y ,   a n d   w r i t e   m o r e   c o d e   t o   f e t c h   i t .   W h e n   t h e   m o d e l   c h a n g e s ,   i n s t e a d   o f   s i m p l y   c r e a t i n g   a   n e w   m i g r a t i o n   ( a n o t h e r   E F   C o r e   f e a t u r e ) ,   a n d / o r   u p d a t i n g   m a p p i n g   i n f o r m a t i o n   i n   o n e   p l a c e   i n   a   D b C o n t e x t ,   e v e r y   q u e r y   t h a t   i s   i m p a c t e d   m u s t   b e   u p d a t e d .   T h e s e   q u e r i e s   h a v e   n o t   c o m p i l e   t i m e   g u a r a n t e e s ,   s o   t h e y   m a y   b r e a k   a t   r u n t i m e   i n   r e s p o n s e   t o   c h a n g e s   t o   t h e   m o d e l   o r   d a t a b a s e ,   m a k i n g   e r r o r s   m o r e   d i f f i c u l t   t o   d e t e c t   q u i c k l y .   I n   e x c h a n g e   f o r   t h e s e   t r a d e o f f s ,   D a p p e r   o f f e r s   e x t r e m e l y   f a s t   p e r f o r m a n c e .   F o r   m o s t   a p p l i c a t i o n s ,   a n d   m o s t   p a r t s   o f   a l m o s t   a l l   a p p l i c a t i o n s ,   E F   C o r e   o f f e r s   a c c e p t a b l e   p e r f o r m a n c e .   T h u s ,   i t s   d e v e l o p e r   p r o d u c t i v i t y   b e n e f i t s   a r e   l i k e l y   t o   o u t w e i g h   i t s   p e r f o r m a n c e   o v e r h e a d .   F o r   q u e r i e s   t h a t   c a n   b e n e f i t   f r o m   c a c h i n g ,   t h e   a c t u a l   q u e r y   m a y   o n l y   b e   e x e c u t e d   a   t i n y   p e r c e n t a g e   o f   t h e   t i m e ,   m a k i n g   r e l a t i v e l y   s m a l l   q u e r y   p e r f o r m a n c e   d i f f e r e n c e s   m o o t .   S Q L   o r   N o S Q L   T r a d i t i o n a l l y ,   r e l a t i o n a l   d a t a b a s e s   l i k e   S Q L   S e r v e r   h a v e   d o m i n a t e d   t h e   m a r k e t p l a c e   f o r   p e r s i s t e n t   d a t a   s t o r a g e ,   b u t   t h e y   a r e   n o t   t h e   o n l y   s o l u t i o n   a v a i l a b l e .   N o S Q L   d a t a b a s e s   l i k e   M o n g o D B   o f f e r   a   d i f f e r e n t   a p p r o a c h   t o   s t o r i n g   o b j e c t s .   R a t h e r   t h a n   m a p p i n g   o b j e c t s   t o   t a b l e s   a n d   r o w s ,   a n o t h e r   o p t i o n   i s   t o   s e r i a l i z e   t h e   e n t i r e   o b j e c t   g r a p h ,   a n d   s t o r e   t h e   r e s u l t .   T h e   b e n e f i t s   o f   t h i s   a p p r o a c h ,   a t   l e a s t   i n i t i a l l y ,   a r e   s i m p l i c i t y   a n d   p e r f o r m a n c e .   I t s   c e r t a i n l y   s i m p l e r   t o   s t o r e   a   s i n g l e   s e r i a l i z e d   o b j e c t   w i t h   a   k e y   t h a n   t o   d e c o m p o s e   t h e   o b j e c t   i n t o   m a n y   t a b l e s   w i t h   r e l a t i o n s h i p s   a n d   u p d a t e   a n d   r o w s   t h a t   m a y   h a v e   c h a n g e d   s i n c e   t h e   o b j e c t   w a s   l a s t   r e t r i e v e d   f r o m   t h e   d a t a b a s e .   L i k e w i s e ,   f e t c h i n g   a n d   d e s e r i a l i z i n g   a   s i n g l e   o b j e c t   f r o m   a   k e y - b a s e d   s t o r e   i s   t y p i c a l l y   m u c h   f a s t e r   a n d   e a s i e r   t h a n   c o m p l e x   j o i n s   o r   m u l t i p l e   d a t a b a s e   q u e r i e s   r e q u i r e d   t o   f u l l y   c o m p o s e   t h e   s a m e   o b j e c t   f r o m   a   r e l a t i o n a l   d a t a b a s e .   T h e   l a c k   o f   l o c k s   o r   t r a n s a c t i o n s   o r   a   f i x e d   s c h e m a   a l s o   m a k e s   N o S Q L   d a t a b a s e s   v e r y   a m e n a b l e   t o   s c a l i n g   a c r o s s   m a n y   m a c h i n e s ,   s u p p o r t i n g   v e r y   l a r g e   d a t a s e t s .   O n   t h e   o t h e r   h a n d ,   N o S Q L   d a t a b a s e s   ( a s   t h e y   a r e   t y p i c a l l y   c a l l e d )   h a v e   t h e i r   d r a w b a c k s .   R e l a t i o n a l   d a t a b a s e s   u s e   n o r m a l i z a t i o n   t o   e n f o r c e   c o n s i s t e n c y   a n d   a v o i d   d u p l i c a t i o n   o f   d a t a .   T h i s   r e d u c e s   t h e   t o t a l   s i z e   o f   t h e   d a t a b a s e   a n d   e n s u r e s   t h a t   u p d a t e s   t o   s h a r e d   d a t a   a r e   a v a i l a b l e   i m m e d i a t e l y   t h r o u g h o u t   t h e   d a t a b a s e .   I n   a   r e l a t i o n a l   d a t a b a s e ,   a n   A d d r e s s   t a b l e   m i g h t   r e f e r e n c e   a   C o u n t r y   t a b l e   b y   I D ,   s u c h   t h a t   i f   a   c o u n t r y s   n a m e   w e r e   c h a n g e d ,   t h e   a d d r e s s   r e c o r d s   w o u l d   b e n e f i t   f r o m   t h e   u p d a t e   w i t h o u t   t h e m s e l v e s   h a v i n g   t o   b e   u p d a t e d .   H o w e v e r ,   i n   a   N o S Q L   d a t a b a s e ,   A d d r e s s   a n d   i t s   a s s o c i a t e d   C o u n t r y   m i g h t   b e   s e r i a l i z e d   a s   p a r t   o f   m a n y   s t o r e d   o b j e c t s .   A n   u p d a t e   t o   a   c o u n t r y   n a m e   w o u l d   r e q u i r e   a l l   s u c h   o b j e c t s   t o   b e   u p d a t e d ,   r a t h e r   t h a n   a   s i n g l e   r o w .   R e l a t i o n a l   d a t a b a s e s   c a n   a l s o   e n s u r e   r e l a t i o n a l   i n t e g r i t y   b y   e n f o r c i n g   r u l e s   l i k e   f o r e i g n   k e y s .   N o S Q L   d a t a b a s e s   t y p i c a l l y   d o   n o t   o f f e r   s u c h   c o n s t r a i n t s   o n   t h e i r   d a t a .   A n o t h e r   c o m p l e x i t y   N o S Q L   d a t a b a s e s   m u s t   d e a l   w i t h   i s   v e r s i o n i n g .   W h e n   a n   o b j e c t s   p r o p e r t i e s   c h a n g e ,   i t   m a y   n o t   b e   a b l e   t o   b e   d e s e r i a l i z e d   f r o m   p a s t   v e r s i o n s   t h a t   w e r e   s t o r e d .   T h u s ,   a l l   e x i s t i n g   o b j e c t s   t h a t   h a v e   a   s e r i a l i z e d   ( p r e v i o u s )   v e r s i o n   o f   t h e   o b j e c t   m u s t   b e   u p d a t e d   t o   c o n f o r m   t o   i t s   n e w   s c h e m a .   T h i s   i s   n o t   c o n c e p t u a l l y   d i f f e r e n t   f r o m   a   r e l a t i o n a l   d a t a b a s e ,   w h e r e   s c h e m a   c h a n g e s   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 1         C h a p t e r   8           W o r k i n g   w i t h   D a t a     s o m e t i m e s   r e q u i r e   u p d a t e   s c r i p t s   o r   m a p p i n g   u p d a t e s .   H o w e v e r ,   t h e   n u m b e r   o f   e n t r i e s   t h a t   m u s t   b e   m o d i f i e d   i s   o f t e n   m u c h   g r e a t e r   i n   t h e   N o S Q L   a p p r o a c h ,   b e c a u s e   t h e r e   i s   m o r e   d u p l i c a t i o n   o f   d a t a .   I t s   p o s s i b l e   i n   N o S Q L   d a t a b a s e s   t o   s t o r e   m u l t i p l e   v e r s i o n s   o f   o b j e c t s ,   s o m e t h i n g   f i x e d   s c h e m a   r e l a t i o n a l   d a t a b a s e s   t y p i c a l l y   d o   n o t   s u p p o r t .   H o w e v e r ,   i n   t h i s   c a s e   y o u r   a p p l i c a t i o n   c o d e   w i l l   n e e d   t o   a c c o u n t   f o r   t h e   e x i s t e n c e   o f   p r e v i o u s   v e r s i o n s   o f   o b j e c t s ,   a d d i n g   a d d i t i o n a l   c o m p l e x i t y .   N o S Q L   d a t a b a s e s   t y p i c a l l y   d o   n o t   e n f o r c e   A C I D ,   w h i c h   m e a n s   t h e y   h a v e   b o t h   p e r f o r m a n c e   a n d   s c a l a b i l i t y   b e n e f i t s   o v e r   r e l a t i o n a l   d a t a b a s e s .   T h e y r e   w e l l - s u i t e d   t o   e x t r e m e l y   l a r g e   d a t a s e t s   a n d   o b j e c t s   t h a t   a r e   n o t   w e l l - s u i t e d   t o   s t o r a g e   i n   n o r m a l i z e d   t a b l e   s t r u c t u r e s .   T h e r e   i s   n o   r e a s o n   w h y   a   s i n g l e   a p p l i c a t i o n   c a n n o t   t a k e   a d v a n t a g e   o f   b o t h   r e l a t i o n a l   a n d   N o S Q L   d a t a b a s e s ,   u s i n g   e a c h   w h e r e   i t   i s   b e s t   s u i t e d .   A z u r e   C o s m o s   D B   A z u r e   C o s m o s   D B   i s   s t o r a g e   g l o b a l l y   d i s t r i b u t e d ,   m u l t i - m o d e l   d a t a b a s e .   C o s m o s   D B   i s   b u i l t   f o r   f a s t   a n d   p r e d i c t a b l e   p e r f o r m a n c e ,   h i g h   a v a i l a b i l i t y ,   e l a s t i c   s c a l i n g ,   a n d   g l o b a l   d i s t r i b u t i o n .   I t   i n c l u d e s   s u p p o r t   f o r   m u l t i p l e   m o d e l s ,   i n c l u d i n g   t h e   s c h e m a - l e s s   J S O N   e n g i n e   D o c u m e n t D B .   D e s p i t e   b e i n g   a   N o S Q L   d a t a b a s e ,   d e v e l o p e r s   c a n   u s e   r i c h   a n d   f a m i l i a r   S Q L   q u e r y   c a p a b i l i t i e s   o n   J S O N   d a t a   w i t h   t h e   D o c u m e n t D B   A P I .   A l l   r e s o u r c e s   i n   D o c u m e n t D B   a r e   s t o r e d   a s   J S O N   d o c u m e n t s .   R e s o u r c e s   a r e   m a n a g e d   a s   i t e m s ,   w h i c h   a r e   d o c u m e n t s   c o n t a i n i n g   m e t a d a t a ,   a n d   f e e d s ,   w h i c h   a r e   c o l l e c t i o n s   o f   i t e m s .   F i g u r e   8 - 2   s h o w s   t h e   r e l a t i o n s h i p   b e t w e e n   d i f f e r e n t   D o c u m e n t D B   r e s o u r c e s .     Evaluation Warning: The document was created with Spire.PDF for .NET
    8 2         C h a p t e r   8           W o r k i n g   w i t h   D a t a     F i g u r e   8 - 2 .   D o c u m e n t D B   r e s o u r c e   o r g a n i z a t i o n .   T h e   D o c u m e n t D B   q u e r y   l a n g u a g e   i s   a   s i m p l e   y e t   p o w e r f u l   i n t e r f a c e   f o r   q u e r y i n g   J S O N   d o c u m e n t s .   T h e   l a n g u a g e   s u p p o r t s   a   s u b s e t   o f   A N S I   S Q L   g r a m m a r   a n d   a d d s   d e e p   i n t e g r a t i o n   o f   J a v a S c r i p t   o b j e c t ,   a r r a y s ,   o b j e c t   c o n s t r u c t i o n ,   a n d   f u n c t i o n   i n v o c a t i o n .   A z u r e   C o s m o s   D B   s u p p o r t s   t h e   M o n g o D B   A P I ,   w h i c h   c a n   b e   u s e d   w i t h   e x i s t i n g   M o n g o D B   l i b r a r i e s   a n d   t o o l s .   I t   a l s o   o f f e r s   a   T a b l e   A P I ,   f o r   k e y - v a l u e   s t o r a g e ,   a n d   a   G r a p h   A P I   b u i l t   f o l l o w i n g   t h e   A p a c h e   T i n k e r P o p   s p e c i f i c a t i o n .   R e f e r e n c e s     A z u r e   C o s m o s   D B     C o s m o s   D B   I n t r o d u c t i o n   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / c o s m o s - d b / i n t r o d u c t i o n   O t h e r   P e r s i s t e n c e   O p t i o n s   I n   a d d i t i o n   t o   r e l a t i o n a l   a n d   N o S Q L   s t o r a g e   o p t i o n s ,   A S P . N E T   C o r e   a p p l i c a t i o n s   c a n   u s e   A z u r e   S t o r a g e   t o   s t o r e   a   v a r i e t y   o f   d a t a   f o r m a t s   a n d   f i l e s   i n   a   c l o u d - b a s e d ,   s c a l a b l e   f a s h i o n .   A z u r e   S t o r a g e   i s   m a s s i v e l y   s c a l a b l e ,   s o   y o u   c a n   s t a r t   o u t   s t o r i n g   s m a l l   a m o u n t s   o f   d a t a   a n d   s c a l e   u p   t o   s t o r i n g   h u n d r e d s   o r   t e r a b y t e s   i f   y o u r   a p p l i c a t i o n   r e q u i r e s   i t .   A z u r e   S t o r a g e   s u p p o r t s   f o u r   k i n d s   o f   d a t a :     B l o b   S t o r a g e   f o r   u n s t r u c t u r e d   t e x t   o r   b i n a r y   s t o r a g e ,   a l s o   r e f e r r e d   t o   a s   o b j e c t   s t o r a g e .     T a b l e   S t o r a g e   f o r   s t r u c t u r e d   d a t a s e t s ,   a c c e s s i b l e   v i a   r o w   k e y s .     Q u e u e   S t o r a g e   f o r   r e l i a b l e   q u e u e - b a s e d   m e s s a g i n g .     F i l e   S t o r a g e   f o r   s h a r e d   f i l e   a c c e s s   b e t w e e n   A z u r e   v i r t u a l   m a c h i n e s   a n d   o n - p r e m i s e s   a p p l i c a t i o n s .   R e f e r e n c e s     A z u r e   S t o r a g e     A z u r e   S t o r a g e   I n t r o d u c t i o n   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / s t o r a g e / s t o r a g e - i n t r o d u c t i o n     C a c h i n g   I n   w e b   a p p l i c a t i o n s ,   e a c h   w e b   r e q u e s t   s h o u l d   b e   c o m p l e t e d   i n   t h e   s h o r t e s t   t i m e   p o s s i b l e .   O n e   w a y   t o   a c h i e v e   t h i s   i s   t o   l i m i t   t h e   n u m b e r   o f   e x t e r n a l   c a l l s   t h e   s e r v e r   m u s t   m a k e   t o   c o m p l e t e   t h e   r e q u e s t .   C a c h i n g   i n v o l v e s   s t o r i n g   a   c o p y   o f   d a t a   o n   t h e   s e r v e r   ( o r   a n o t h e r   d a t a   s t o r e   t h a t   i s   m o r e   e a s i l y   q u e r i e d   t h a n   t h e   s o u r c e   o f   t h e   d a t a ) .   W e b   a p p l i c a t i o n s ,   a n d   e s p e c i a l l y   n o n - S P A   t r a d i t i o n a l   w e b   a p p l i c a t i o n s ,   n e e d   t o   b u i l d   t h e   e n t i r e   u s e r   i n t e r f a c e   w i t h   e v e r y   r e q u e s t .   T h i s   f r e q u e n t l y   i n v o l v e s   m a k i n g   m a n y   o f   t h e   s a m e   d a t a b a s e   q u e r i e s   r e p e a t e d l y   f r o m   o n e   u s e r   r e q u e s t   t o   t h e   n e x t .   I n   m o s t   c a s e s ,   t h i s   d a t a   c h a n g e s   r a r e l y ,   s o   t h e r e   i s   l i t t l e   r e a s o n   t o   c o n s t a n t l y   r e q u e s t   i t   f r o m   t h e   d a t a b a s e .   A S P . N E T   C o r e   s u p p o r t s   r e s p o n s e   c a c h i n g ,   f o r   c a c h i n g   e n t i r e   p a g e s ,   a n d   d a t a   c a c h i n g ,   w h i c h   s u p p o r t s   m o r e   g r a n u l a r   c a c h i n g   b e h a v i o r .   W h e n   i m p l e m e n t i n g   c a c h i n g ,   i t s   i m p o r t a n t   t o   k e e p   i n   m i n d   s e p a r a t i o n   o f   c o n c e r n s .   A v o i d   i m p l e m e n t i n g   c a c h i n g   l o g i c   i n   y o u r   d a t a   a c c e s s   l o g i c ,   o r   i n   y o u r   u s e r   i n t e r f a c e .   I n s t e a d ,   e n c a p s u l a t e   c a c h i n g   i n   i t s   o w n   c l a s s e s ,   a n d   u s e   c o n f i g u r a t i o n   t o   m a n a g e   i t s   b e h a v i o r .   T h i s   f o l l o w s   t h e   O p e n / C l o s e d   a n d   S i n g l e   R e s p o n s i b i l i t y   p r i n c i p l e s ,   a n d   w i l l   m a k e   i t   e a s i e r   f o r   y o u   t o   m a n a g e   h o w   y o u   u s e   c a c h i n g   i n   y o u r   a p p l i c a t i o n   a s   i t   g r o w s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 3         C h a p t e r   8           W o r k i n g   w i t h   D a t a     A S P . N E T   C o r e   R e s p o n s e   C a c h i n g   A S P . N E T   C o r e   s u p p o r t s   t w o   l e v e l s   o f   r e s p o n s e   c a c h i n g .   T h e   f i r s t   l e v e l   d o e s   n o t   c a c h e   a n y t h i n g   o n   t h e   s e r v e r ,   b u t   a d d s   H T T P   h e a d e r s   t h a t   i n s t r u c t   c l i e n t s   a n d   p r o x y   s e r v e r s   t o   c a c h e   r e s p o n s e s .   T h i s   i s   i m p l e m e n t e d   b y   a d d i n g   t h e   R e s p o n s e C a c h e   a t t r i b u t e   t o   i n d i v i d u a l   c o n t r o l l e r s   o r   a c t i o n s :   [ R e s p o n s e C a c h e ( D u r a t i o n   =   6 0 ) ]   p u b l i c   I A c t i o n R e s u l t   C o n t a c t ( )   {   }           V i e w D a t a [ " M e s s a g e " ]   =   " Y o u r   c o n t a c t   p a g e . " ;           r e t u r n   V i e w ( ) ;   }   T h e   a b o v e   e x a m p l e   w i l l   r e s u l t   i n   t h e   f o l l o w i n g   h e a d e r   b e i n g   a d d e d   t o   t h e   r e s p o n s e ,   i n s t r u c t i n g   c l i e n t s   t o   c a c h e   t h e   r e s u l t   f o r   u p   t o   6 0   s e c o n d s .   C a c h e - C o n t r o l :   p u b l i c , m a x - a g e = 6 0   I n   o r d e r   t o   a d d   s e r v e r - s i d e   i n - m e m o r y   c a c h i n g   t o   t h e   a p p l i c a t i o n ,   y o u   m u s t   r e f e r e n c e   t h e   M i c r o s o f t . A s p N e t C o r e . R e s p o n s e C a c h i n g   N u G e t   p a c k a g e ,   a n d   t h e n   a d d   t h e   R e s p o n s e   C a c h i n g   m i d d l e w a r e .   T h i s   m i d d l e w a r e   i s   c o n f i g u r e d   i n   b o t h   C o n f i g u r e S e r v i c e s   a n d   C o n f i g u r e   i n   S t a r t u p :   p u b l i c   v o i d   C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n   s e r v i c e s )   {           s e r v i c e s . A d d R e s p o n s e C a c h i n g ( ) ;   }   p u b l i c   v o i d   C o n f i g u r e ( I A p p l i c a t i o n B u i l d e r   a p p )   {           a p p . U s e R e s p o n s e C a c h i n g ( ) ;   }   T h e   R e s p o n s e   C a c h i n g   M i d d l e w a r e   w i l l   a u t o m a t i c a l l y   c a c h e   r e s p o n s e s   b a s e d   o n   a   s e t   o f   c o n d i t i o n s ,   w h i c h   y o u   c a n   c u s t o m i z e .   B y   d e f a u l t ,   o n l y   2 0 0   ( O K )   r e s p o n s e s   r e q u e s t e d   v i a   G E T   o r   H E A D   m e t h o d s   a r e   c a c h e d .   I n   a d d i t i o n ,   r e q u e s t s   m u s t   h a v e   a   r e s p o n s e   w i t h   a   C a c h e - C o n t r o l :   p u b l i c   h e a d e r ,   a n d   c a n n o t   i n c l u d e   h e a d e r s   f o r   A u t h o r i z a t i o n   o r   S e t - C o o k i e .   S e e   a   c o m p l e t e   l i s t   o f   t h e   c a c h i n g   c o n d i t i o n s   u s e d   b y   t h e   r e s p o n s e   c a c h i n g   m i d d l e w a r e .   D a t a   C a c h i n g   R a t h e r   t h a n   ( o r   i n   a d d i t i o n   t o )   c a c h i n g   f u l l   w e b   r e s p o n s e s ,   y o u   c a n   c a c h e   t h e   r e s u l t s   o f   i n d i v i d u a l   d a t a   q u e r i e s .   F o r   t h i s ,   y o u   c a n   u s e   i n   m e m o r y   c a c h i n g   o n   t h e   w e b   s e r v e r ,   o r   u s e   a   d i s t r i b u t e d   c a c h e .   T h i s   s e c t i o n   w i l l   d e m o n s t r a t e   h o w   t o   i m p l e m e n t   i n   m e m o r y   c a c h i n g .   Y o u   a d d   s u p p o r t   f o r   m e m o r y   ( o r   d i s t r i b u t e d )   c a c h i n g   i n   C o n f i g u r e S e r v i c e s :   p u b l i c   v o i d   C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n   s e r v i c e s )   {           s e r v i c e s . A d d M e m o r y C a c h e ( ) ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 4         C h a p t e r   8           W o r k i n g   w i t h   D a t a             s e r v i c e s . A d d M v c ( ) ;   }   B e   s u r e   t o   a d d   t h e   M i c r o s o f t . E x t e n s i o n s . C a c h i n g . M e m o r y   N u G e t   p a c k a g e   a s   w e l l .   O n c e   y o u v e   a d d e d   t h e   s e r v i c e ,   y o u   r e q u e s t   I M e m o r y C a c h e   v i a   d e p e n d e n c y   i n j e c t i o n   w h e r e v e r   y o u   n e e d   t o   a c c e s s   t h e   c a c h e .   I n   t h i s   e x a m p l e ,   t h e   C a c h e d C a t a l o g S e r v i c e   i s   u s i n g   t h e   P r o x y   ( o r   D e c o r a t o r )   d e s i g n   p a t t e r n ,   b y   p r o v i d i n g   a n   a l t e r n a t i v e   i m p l e m e n t a t i o n   o f   I C a t a l o g S e r v i c e   t h a t   c o n t r o l s   a c c e s s   t o   ( o r   a d d s   b e h a v i o r   t o )   t h e   u n d e r l y i n g   C a t a l o g S e r v i c e   i m p l e m e n t a t i o n .   p u b l i c   c l a s s   C a c h e d C a t a l o g S e r v i c e   :   I C a t a l o g S e r v i c e   {           p r i v a t e   r e a d o n l y   I M e m o r y C a c h e   _ c a c h e ;           p r i v a t e   r e a d o n l y   C a t a l o g S e r v i c e   _ c a t a l o g S e r v i c e ;           p r i v a t e   s t a t i c   r e a d o n l y   s t r i n g   _ b r a n d s K e y   =   " b r a n d s " ;           p r i v a t e   s t a t i c   r e a d o n l y   s t r i n g   _ t y p e s K e y   =   " t y p e s " ;           p r i v a t e   s t a t i c   r e a d o n l y   s t r i n g   _ i t e m s K e y T e m p l a t e   =   " i t e m s - { 0 } - { 1 } - { 2 } - { 3 } " ;           p r i v a t e   s t a t i c   r e a d o n l y   T i m e S p a n   _ d e f a u l t C a c h e D u r a t i o n   =   T i m e S p a n . F r o m S e c o n d s ( 3 0 ) ;             p u b l i c   C a c h e d C a t a l o g S e r v i c e ( I M e m o r y C a c h e   c a c h e ,                   C a t a l o g S e r v i c e   c a t a l o g S e r v i c e )           {                   _ c a c h e   =   c a c h e ;                   _ c a t a l o g S e r v i c e   =   c a t a l o g S e r v i c e ;           }             p u b l i c   a s y n c   T a s k < I E n u m e r a b l e < S e l e c t L i s t I t e m > >   G e t B r a n d s ( )           {                   r e t u r n   a w a i t   _ c a c h e . G e t O r C r e a t e A s y n c ( _ b r a n d s K e y ,   a s y n c   e n t r y   = >                                   {                                           e n t r y . S l i d i n g E x p i r a t i o n   =   _ d e f a u l t C a c h e D u r a t i o n ;                                           r e t u r n   a w a i t   _ c a t a l o g S e r v i c e . G e t B r a n d s ( ) ;                                   } ) ;           }             p u b l i c   a s y n c   T a s k < C a t a l o g >   G e t C a t a l o g I t e m s ( i n t   p a g e I n d e x ,   i n t   i t e m s P a g e ,   i n t ?   b r a n d I D ,   i n t ?   t y p e I d )           {                   s t r i n g   c a c h e K e y   =   S t r i n g . F o r m a t ( _ i t e m s K e y T e m p l a t e ,   p a g e I n d e x ,   i t e m s P a g e ,   b r a n d I D ,   t y p e I d ) ;                   r e t u r n   a w a i t   _ c a c h e . G e t O r C r e a t e A s y n c ( c a c h e K e y ,   a s y n c   e n t r y   = >                   {   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 5         C h a p t e r   8           W o r k i n g   w i t h   D a t a                             e n t r y . S l i d i n g E x p i r a t i o n   =   _ d e f a u l t C a c h e D u r a t i o n ;                           r e t u r n   a w a i t   _ c a t a l o g S e r v i c e . G e t C a t a l o g I t e m s ( p a g e I n d e x ,   i t e m s P a g e ,   b r a n d I D ,   t y p e I d ) ;                   } ) ;           }             p u b l i c   a s y n c   T a s k < I E n u m e r a b l e < S e l e c t L i s t I t e m > >   G e t T y p e s ( )           {                   r e t u r n   a w a i t   _ c a c h e . G e t O r C r e a t e A s y n c ( _ t y p e s K e y ,   a s y n c   e n t r y   = >                   {                           e n t r y . S l i d i n g E x p i r a t i o n   =   _ d e f a u l t C a c h e D u r a t i o n ;                           r e t u r n   a w a i t   _ c a t a l o g S e r v i c e . G e t T y p e s ( ) ;                   } ) ;           }   }   T o   c o n f i g u r e   t h e   a p p l i c a t i o n   t o   u s e   t h e   c a c h e d   v e r s i o n   o f   t h e   s e r v i c e ,   b u t   s t i l l   a l l o w   t h e   s e r v i c e   t o   g e t   t h e   i n s t a n c e   o f   C a t a l o g S e r v i c e   i t   n e e d s   i n   i t s   c o n s t r u c t o r ,   y o u   w o u l d   a d d   t h e   f o l l o w i n g   i n   C o n f i g u r e S e r v i c e s :   s e r v i c e s . A d d M e m o r y C a c h e ( ) ;   s e r v i c e s . A d d S c o p e d < I C a t a l o g S e r v i c e ,   C a c h e d C a t a l o g S e r v i c e > ( ) ;   s e r v i c e s . A d d S c o p e d < C a t a l o g S e r v i c e > ( ) ;   W i t h   t h i s   i n   p l a c e ,   t h e   d a t a b a s e   c a l l s   t o   f e t c h   t h e   c a t a l o g   d a t a   w i l l   o n l y   b e   m a d e   o n c e   p e r   m i n u t e ,   r a t h e r   t h a n   o n   e v e r y   r e q u e s t .   D e p e n d i n g   o n   t h e   t r a f f i c   t o   t h e   s i t e ,   t h i s   c a n   h a v e   a   v e r y   s i g n i f i c a n t   i m p a c t   o n   t h e   n u m b e r   o f   q u e r i e s   m a d e   t o   t h e   d a t a b a s e ,   a n d   t h e   a v e r a g e   p a g e   l o a d   t i m e   f o r   t h e   h o m e   p a g e   t h a t   c u r r e n t l y   d e p e n d s   o n   a l l   t h r e e   o f   t h e   q u e r i e s   e x p o s e d   b y   t h i s   s e r v i c e .   A n   i s s u e   t h a t   a r i s e s   w h e n   c a c h i n g   i s   i m p l e m e n t e d   i s   s t a l e   d a t a     t h a t   i s ,   d a t a   t h a t   h a s   c h a n g e d   a t   t h e   s o u r c e   b u t   a n   o u t   o f   d a t e   v e r s i o n   r e m a i n s   i n   t h e   c a c h e .   A   s i m p l e   w a y   t o   m i t i g a t e   t h i s   i s s u e   i s   t o   u s e   s m a l l   c a c h e   d u r a t i o n s ,   s i n c e   f o r   a   b u s y   a p p l i c a t i o n   t h e r e   i s   l i m i t e d   a d d i t i o n a l   b e n e f i t   t o   e x t e n d i n g   t h e   l e n g t h   d a t a   i s   c a c h e d .   F o r   e x a m p l e ,   c o n s i d e r   a   p a g e   t h a t   m a k e s   a   s i n g l e   d a t a b a s e   q u e r y ,   a n d   i s   r e q u e s t e d   1 0   t i m e s   p e r   s e c o n d .   I f   t h i s   p a g e   i s   c a c h e d   f o r   o n e   m i n u t e ,   i t   w i l l   r e s u l t   i n   t h e   n u m b e r   o f   d a t a b a s e   q u e r i e s   m a d e   p e r   m i n u t e   t o   d r o p   f r o m   6 0 0   t o   1 ,   a   r e d u c t i o n   o f   9 9 . 8 % .   I f   i n s t e a d   t h e   c a c h e   d u r a t i o n   w e r e   m a d e   o n e   h o u r ,   t h e   o v e r a l l   r e d u c t i o n   w o u l d   b e   9 9 . 9 9 7 % ,   b u t   n o w   t h e   l i k e l i h o o d   a n d   p o t e n t i a l   a g e   o f   s t a l e   d a t a   a r e   b o t h   i n c r e a s e d   d r a m a t i c a l l y .   A n o t h e r   a p p r o a c h   i s   t o   p r o a c t i v e l y   r e m o v e   c a c h e   e n t r i e s   w h e n   t h e   d a t a   t h e y   c o n t a i n   i s   u p d a t e d .   A n y   i n d i v i d u a l   e n t r y   c a n   b e   r e m o v e d   i f   i t s   k e y   i s   k n o w n :   _ c a c h e . R e m o v e ( c a c h e K e y ) ;   I f   y o u r   a p p l i c a t i o n   e x p o s e s   f u n c t i o n a l i t y   f o r   u p d a t i n g   e n t r i e s   t h a t   i t   c a c h e s ,   y o u   c a n   r e m o v e   t h e   c o r r e s p o n d i n g   c a c h e   e n t r i e s   i n   y o u r   c o d e   t h a t   p e r f o r m s   t h e   u p d a t e s .   S o m e t i m e s   t h e r e   m a y   b e   m a n y   d i f f e r e n t   e n t r i e s   t h a t   d e p e n d   o n   a   p a r t i c u l a r   s e t   o f   d a t a .   I n   t h a t   c a s e ,   i t   c a n   b e   u s e f u l   t o   c r e a t e   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 6         C h a p t e r   8           W o r k i n g   w i t h   D a t a     d e p e n d e n c i e s   b e t w e e n   c a c h e   e n t r i e s ,   b y   u s i n g   a   C a n c e l l a t i o n C h a n g e T o k e n .   W i t h   a   C a n c e l l a t i o n C h a n g e T o k e n ,   y o u   c a n   e x p i r e   m u l t i p l e   c a c h e   e n t r i e s   a t   o n c e   b y   c a n c e l l i n g   t h e   t o k e n .   / /   c o n f i g u r e   C a n c e l l a t i o n T o k e n   a n d   a d d   e n t r y   t o   c a c h e   v a r   c t s   =   n e w   C a n c e l l a t i o n T o k e n S o u r c e ( ) ;   _ c a c h e . S e t ( c t s ,   c t s ) ;   _ c a c h e . S e t ( c a c h e K e y ,                           i t e m T o C a c h e ,                           n e w   C a n c e l l a t i o n C h a n g e T o k e n ( c t s . T o k e n ) ) ;     / /   e l s e w h e r e ,   e x p i r e   t h e   c a c h e   b y   c a n c e l l i n g   t h e   t o k e n   _ c a c h e . G e t < C a n c e l l a t i o n T o k e n S o u r c e > ( c t s ) . C a n c e l ( ) ;     C a c h i n g   c a n   d r a m a t i c a l l y   i m p r o v e   t h e   p e r f o r m a n c e   o f   w e b   p a g e s   t h a t   r e p e a t e d l y   r e q u e s t   t h e   s a m e   v a l u e s   f r o m   t h e   d a t a b a s e .   B e   s u r e   t o   m e a s u r e   d a t a   a c c e s s   a n d   p a g e   p e r f o r m a n c e   b e f o r e   a p p l y i n g   c a c h i n g ,   a n d   o n l y   a p p l y   c a c h i n g   w h e r e   y o u   s e e   a   n e e d   f o r   i m p r o v e m e n t .   C a c h i n g   c o n s u m e s   w e b   s e r v e r   m e m o r y   r e s o u r c e s   a n d   i n c r e a s e s   t h e   c o m p l e x i t y   o f   t h e   a p p l i c a t i o n ,   s o   i t s   i m p o r t a n t   y o u   d o n t   p r e m a t u r e l y   o p t i m i z e   u s i n g   t h i s   t e c h n i q u e . Evaluation Warning: The document was created with Spire.PDF for .NET
      8 7         C h a p t e r   9           S E C T I O N       9     T e s t i n g   A S P . N E T   C o r e   M V C   A p p s   I f   y o u   d o n t   l i k e   u n i t   t e s t i n g   y o u r   p r o d u c t ,   m o s t   l i k e l y   y o u r   c u s t o m e r s   w o n t   l i k e   t o   t e s t   i t ,   e i t h e r .   A n o n y m o u s   S u m m a r y   S o f t w a r e   o f   a n y   c o m p l e x i t y   c a n   f a i l   i n   u n e x p e c t e d   w a y s   i n   r e s p o n s e   t o   c h a n g e s .   T h u s ,   t e s t i n g   a f t e r   m a k i n g   c h a n g e s   i s   r e q u i r e d   f o r   a l l   b u t   t h e   m o s t   t r i v i a l   ( o r   l e a s t   c r i t i c a l )   a p p l i c a t i o n s .   M a n u a l   t e s t i n g   i s   t h e   s l o w e s t ,   l e a s t   r e l i a b l e ,   m o s t   e x p e n s i v e   w a y   t o   t e s t   s o f t w a r e .   U n f o r t u n a t e l y ,   i f   a p p l i c a t i o n s   a r e   n o t   d e s i g n e d   t o   b e   t e s t a b l e ,   i t   c a n   b e   t h e   o n l y   m e a n s   a v a i l a b l e .   A p p l i c a t i o n s   w r i t t e n   f o l l o w i n g   t h e   a r c h i t e c t u r a l   p r i n c i p l e s   l a i d   o u t   i n   c h a p t e r   X   s h o u l d   b e   u n i t   t e s t a b l e ,   a n d   A S P . N E T   C o r e   a p p l i c a t i o n s   s u p p o r t   a u t o m a t e d   i n t e g r a t i o n   a n d   f u n c t i o n a l   t e s t i n g   a s   w e l l .   K i n d s   o f   A u t o m a t e d   T e s t s   T h e r e   a r e   m a n y   k i n d s   o f   a u t o m a t e d   t e s t s   f o r   s o f t w a r e   a p p l i c a t i o n s .   T h e   s i m p l e s t ,   l o w e s t   l e v e l   t e s t   i s   t h e   u n i t   t e s t .   A t   a   s l i g h t l y   h i g h e r   l e v e l   t h e r e   a r e   i n t e g r a t i o n   t e s t s   a n d   f u n c t i o n a l   t e s t s .   O t h e r   k i n d s   o f   t e s t s ,   l i k e   U I   t e s t s ,   l o a d   t e s t s ,   s t r e s s   t e s t s ,   a n d   s m o k e   t e s t s ,   a r e   b e y o n d   t h e   s c o p e   o f   t h i s   d o c u m e n t .   U n i t   T e s t s   A   u n i t   t e s t   t e s t s   a   s i n g l e   p a r t   o f   y o u r   a p p l i c a t i o n s   l o g i c .   O n e   c a n   f u r t h e r   d e s c r i b e   i t   b y   l i s t i n g   s o m e   o f   t h e   t h i n g s   t h a t   i t   i s n t .   A   u n i t   t e s t   d o e s n t   t e s t   h o w   y o u r   c o d e   w o r k s   w i t h   d e p e n d e n c i e s   o r   i n f r a s t r u c t u r e     t h a t s   w h a t   i n t e g r a t i o n   t e s t s   a r e   f o r .   A   u n i t   t e s t   d o e s n t   t e s t   t h e   f r a m e w o r k   y o u r   c o d e   i s   w r i t t e n   o n     y o u   s h o u l d   a s s u m e   i t   w o r k s   o r ,   i f   y o u   f i n d   i t   d o e s n t ,   f i l e   a   b u g   a n d   c o d e   a   w o r k a r o u n d .   A   u n i t   t e s t   r u n s   c o m p l e t e l y   i n   m e m o r y   a n d   i n   p r o c e s s .   I t   d o e s n t   c o m m u n i c a t e   w i t h   t h e   f i l e   s y s t e m ,   t h e   n e t w o r k ,   o r   a   d a t a b a s e .   U n i t   t e s t s   s h o u l d   o n l y   t e s t   y o u r   c o d e .   U n i t   t e s t s ,   b y   v i r t u e   o f   t h e   f a c t   t h a t   t h e y   t e s t   o n l y   a   s i n g l e   u n i t   o f   y o u r   c o d e ,   w i t h   n o   e x t e r n a l   d e p e n d e n c i e s ,   s h o u l d   e x e c u t e   e x t r e m e l y   q u i c k l y .   T h u s ,   y o u   s h o u l d   b e   a b l e   t o   r u n   t e s t   s u i t e s   o f   h u n d r e d s   o f   u n i t   t e s t s   i n   a   f e w   s e c o n d s .   R u n   t h e m   f r e q u e n t l y ,   i d e a l l y   b e f o r e   e v e r y   p u s h   t o   a   s h a r e d   s o u r c e   c o n t r o l   r e p o s i t o r y ,   a n d   c e r t a i n l y   w i t h   e v e r y   a u t o m a t e d   b u i l d   o n   y o u r   b u i l d   s e r v e r .   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 8         C h a p t e r   9           T e s t i n g     I f   y o u r e   t e s t i n g   m e t h o d s   t h a t   r e l y   o n   o t h e r   s e r v i c e s ,   i d e a l l y   d e f i n e d   a s   i n t e r f a c e s   a n d   i n j e c t e d   a s   c o n s t r u c t o r   o r   m e t h o d   a r g u m e n t s ,   y o u l l   l i k e l y   u s e   f a k e   o r   m o c k   i m p l e m e n t a t i o n s   o f   t h e s e   i n t e r f a c e s   i n   y o u r   u n i t   t e s t .   R e m e m b e r ,   y o u r   g o a l   i s   o n l y   t o   t e s t   t h e   c o d e   i n   a   s i n g l e   u n i t   ( i d e a l l y   a   s i n g l e   m e t h o d )   o f   y o u r   a p p l i c a t i o n ,   n o t   c o d e   t h i s   u n i t   r e f e r e n c e s .   I n t e g r a t i o n   T e s t s   A l t h o u g h   i t s   a   g o o d   i d e a   t o   e n c a p s u l a t e   y o u r   c o d e   t h a t   i n t e r a c t s   w i t h   i n f r a s t r u c t u r e   l i k e   d a t a b a s e s   a n d   f i l e   s y s t e m s ,   y o u   w i l l   s t i l l   h a v e   s o m e   o f   t h a t   c o d e ,   a n d   y o u   w i l l   p r o b a b l y   w a n t   t o   t e s t   i t .   A d d i t i o n a l l y ,   y o u   s h o u l d   v e r i f y   t h a t   y o u r   c o d e s   l a y e r s   i n t e r a c t   a s   y o u   e x p e c t   w h e n   y o u r   a p p l i c a t i o n s   d e p e n d e n c i e s   a r e   f u l l y   r e s o l v e d .   T h i s   i s   t h e   r e s p o n s i b i l i t y   o f   i n t e g r a t i o n   t e s t s .   I n t e g r a t i o n   t e s t s   t e n d   t o   b e   s l o w e r   a n d   m o r e   d i f f i c u l t   t o   s e t   u p   t h a n   u n i t   t e s t s ,   b e c a u s e   t h e y   o f t e n   d e p e n d   o n   e x t e r n a l   d e p e n d e n c i e s   a n d   i n f r a s t r u c t u r e .   T h u s ,   y o u   s h o u l d   a v o i d   t e s t i n g   t h i n g s   t h a t   c o u l d   b e   t e s t e d   w i t h   u n i t   t e s t s   i n   i n t e g r a t i o n   t e s t s .   I f   y o u   c a n   t e s t   a   g i v e n   s c e n a r i o   w i t h   a   u n i t   t e s t ,   y o u   s h o u l d   t e s t   i t   w i t h   a   u n i t   t e s t .   I f   y o u   c a n t ,   t h e n   c o n s i d e r   u s i n g   a n   i n t e g r a t i o n   t e s t .   B e c a u s e   t h e   p u r p o s e   o f   i n t e g r a t i o n   t e s t s   i s   t o   v e r i f y   t h a t   m u l t i p l e   p i e c e s   w o r k   t o g e t h e r ,   i n c l u d i n g   r e a l   i n f r a s t r u c t u r e   c o d e ,   y o u l l   r a r e l y   w a n t   t o   u s e   f a k e   o r   m o c k   i m p l e m e n t a t i o n s   i n   i n t e g r a t i o n   t e s t s .   I f   y o u   d o   n e e d   f a k e   o r   m o c k   i m p l e m e n t a t i o n s ,   m a k e   s u r e   y o u r e   n o t   a c c i d e n t a l l y   t e s t i n g   t h e s e   i m p l e m e n t a t i o n s ,   i n s t e a d   o f   t h e   r e a l   b e h a v i o r   y o u r e   t r y i n g   t o   t e s t .   I n t e g r a t i o n   t e s t s   w i l l   o f t e n   h a v e   m o r e   c o m p l e x   s e t u p   a n d   t e a r d o w n   p r o c e d u r e s   t h a n   u n i t   t e s t s .   F o r   e x a m p l e ,   a n   i n t e g r a t i o n   t e s t   t h a t   g o e s   a g a i n s t   a n   a c t u a l   d a t a b a s e   w i l l   n e e d   a   w a y   t o   r e t u r n   t h e   d a t a b a s e   t o   a   k n o w n   s t a t e   b e f o r e   e a c h   t e s t   r u n .   A s   n e w   t e s t s   a r e   a d d e d ,   a n d   t h e   p r o d u c t i o n   d a t a b a s e   s c h e m a   e v o l v e s ,   t h e s e   t e s t   s c r i p t s   w i l l   t e n d   t o   g r o w   i n   s i z e   a n d   c o m p l e x i t y .   I n   m a n y   l a r g e   s y s t e m s ,   i t   i s   i m p r a c t i c a l   t o   r u n   f u l l   s u i t e s   o f   i n t e g r a t i o n   t e s t s   o n   d e v e l o p e r   w o r k s t a t i o n s   b e f o r e   c h e c k i n g   i n   c h a n g e s   t o   s h a r e d   s o u r c e   c o n t r o l .   I n   t h e s e   c a s e s ,   i n t e g r a t i o n   t e s t s   m a y   b e   r u n   o n   a   b u i l d   s e r v e r .   T h e   e S h o p O n W e b   s a m p l e   i n c l u d e s   a n   O r d e r R e p o s i t o r y   t h a t   i s   r e s p o n s i b l e   f o r   f e t c h i n g   a n d   s a v i n g   O r d e r   d a t a .   I t   d e f i n e s   a   G e t B y I d   m e t h o d .   A n   e x a m p l e   i n t e g r a t i o n   t e s t   f o r   t h i s   m e t h o d   i s   s h o w n   b e l o w :   p u b l i c   c l a s s   G e t B y I d   {           p r i v a t e   r e a d o n l y   C a t a l o g C o n t e x t   _ c a t a l o g C o n t e x t ;           p r i v a t e   r e a d o n l y   O r d e r R e p o s i t o r y   _ o r d e r R e p o s i t o r y ;           p r i v a t e   O r d e r B u i l d e r   O r d e r B u i l d e r   {   g e t ;   }   =   n e w   O r d e r B u i l d e r ( ) ;           p r i v a t e   r e a d o n l y   I T e s t O u t p u t H e l p e r   _ o u t p u t ;             p u b l i c   G e t B y I d ( I T e s t O u t p u t H e l p e r   o u t p u t )           {                   _ o u t p u t   =   o u t p u t ;                   v a r   d b O p t i o n s   =   n e w   D b C o n t e x t O p t i o n s B u i l d e r < C a t a l o g C o n t e x t > ( )                           . U s e I n M e m o r y D a t a b a s e ( d a t a b a s e N a m e :   " T e s t C a t a l o g " )                           . O p t i o n s ;                   _ c a t a l o g C o n t e x t   =   n e w   C a t a l o g C o n t e x t ( d b O p t i o n s ) ;                   _ o r d e r R e p o s i t o r y   =   n e w   O r d e r R e p o s i t o r y ( _ c a t a l o g C o n t e x t ) ;           }   Evaluation Warning: The document was created with Spire.PDF for .NET
    8 9         C h a p t e r   9           T e s t i n g               [ F a c t ]           p u b l i c   v o i d   G e t s E x i s t i n g O r d e r ( )           {                   v a r   e x i s t i n g O r d e r   =   O r d e r B u i l d e r . W i t h D e f a u l t V a l u e s ( ) ;                   _ c a t a l o g C o n t e x t . O r d e r s . A d d ( e x i s t i n g O r d e r ) ;                   _ c a t a l o g C o n t e x t . S a v e C h a n g e s ( ) ;                   i n t   o r d e r I d   =   e x i s t i n g O r d e r . I d ;                   _ o u t p u t . W r i t e L i n e ( $ " O r d e r I d :   { o r d e r I d } " ) ;                     v a r   o r d e r F r o m R e p o   =   _ o r d e r R e p o s i t o r y . G e t B y I d ( o r d e r I d ) ;                   A s s e r t . E q u a l ( O r d e r B u i l d e r . T e s t B u y e r I d ,   o r d e r F r o m R e p o . B u y e r I d ) ;                     / /   N o t e :   U s i n g   I n M e m o r y D a t a b a s e   O r d e r I t e m s   i s   a v a i l a b l e .   W i l l   b e   n u l l   i f   u s i n g   S Q L   D B .                   v a r   f i r s t I t e m   =   o r d e r F r o m R e p o . O r d e r I t e m s . F i r s t O r D e f a u l t ( ) ;                   A s s e r t . E q u a l ( O r d e r B u i l d e r . T e s t U n i t s ,   f i r s t I t e m . U n i t s ) ;           }   }   N o t e   t h a t   i n   t h e   a b o v e   t e s t ,   a n   i n   m e m o r y   d a t a b a s e   i s   u s e d .   E n t i t y   F r a m e w o r k   C o r e   s u p p o r t s   u s i n g   i n   m e m o r y   d a t a b a s e s   f o r   i n t e g r a t i o n   t e s t i n g   s c e n a r i o s   w h e r e   t h e y   a r e   h e l p f u l   b e c a u s e   o f   t h e i r   f a s t   e x e c u t i o n   s p e e d   a n d   e a s e   o f   s e t u p .   N o   e x t e r n a l   d a t a b a s e   i s   r e q u i r e d   t o   r u n   t h e s e   i n t e g r a t i o n   t e s t s .   I n   t h e   t e s t   m e t h o d ,   t h e   C a t a l o g C o n t e x t   t y p e   i s   u s e d   t o   s e t   u p   t h e   d a t a b a s e   w i t h   a   k n o w n   g o o d   e x i s t i n g   o r d e r .   T h e n ,   t h e   r e p o s i t o r y   i m p l e m e n t a t i o n   t y p e   i s   u s e d   t o   f e t c h   a n   o r d e r   b y   i t s   i d .   F i n a l l y ,   t h e   t e s t   a s s e r t s   t h a t   t h e   O r d e r   t y p e   r e t u r n e d   b y   t h e   r e p o s i t o r y   w a s   t h e   e x p e c t e d   o n e   t h a t   w a s   a d d e d .   A   n o t e   o f   c a u t i o n   w h e n   t e s t i n g   w i t h   I n M e m o r y D a t a b a s e ,   h o w e v e r ,   i s   t h a t   i t   w i l l   n o t   v a l i d a t e   t h a t   e a g e r   l o a d i n g   i s   f u n c t i o n i n g   p r o p e r l y .   N a v i g a t i o n   p r o p e r t i e s   w i l l   b e   i n s t a n t i a t e d   w h e n   u s i n g   I n M e m o r y D a t a b a s e ,   b u t   m a y   b e   n u l l   w h e n   t h e   s a m e   c o d e   i s   r u n   a g a i n s t   a   r e l a t i o n a l   d a t a b a s e .   T o   t e s t   t h i s   s c e n a r i o ,   y o u   n e e d   t o   u s e   a   r e a l   r e l a t i o n a l   d a t a b a s e   i n s t a n c e   i n   y o u r   i n t e g r a t i o n   t e s t s .   F u n c t i o n a l   T e s t s   I n t e g r a t i o n   t e s t s   a r e   w r i t t e n   f r o m   t h e   p e r s p e c t i v e   o f   t h e   d e v e l o p e r ,   t o   v e r i f y   t h a t   s o m e   c o m p o n e n t s   o f   t h e   s y s t e m   w o r k   c o r r e c t l y   t o g e t h e r .   F u n c t i o n a l   t e s t s   a r e   w r i t t e n   f r o m   t h e   p e r s p e c t i v e   o f   t h e   u s e r ,   a n d   v e r i f y   t h e   c o r r e c t n e s s   o f   t h e   s y s t e m   b a s e d   o n   i t s   r e q u i r e m e n t s .   T h e   f o l l o w i n g   e x c e r p t   o f f e r s   a   u s e f u l   a n a l o g y   f o r   h o w   t o   t h i n k   a b o u t   f u n c t i o n a l   t e s t s ,   c o m p a r e d   t o   u n i t   t e s t s :   M a n y   t i m e s   t h e   d e v e l o p m e n t   o f   a   s y s t e m   i s   l i k e n e d   t o   t h e   b u i l d i n g   o f   a   h o u s e .   W h i l e   t h i s   a n a l o g y   i s n ' t   q u i t e   c o r r e c t ,   w e   c a n   e x t e n d   i t   f o r   t h e   p u r p o s e s   o f   u n d e r s t a n d i n g   t h e   d i f f e r e n c e   b e t w e e n   u n i t   a n d   f u n c t i o n a l   t e s t s .   U n i t   t e s t i n g   i s   a n a l o g o u s   t o   a   b u i l d i n g   i n s p e c t o r   v i s i t i n g   a   h o u s e ' s   c o n s t r u c t i o n   s i t e .   H e   i s   f o c u s e d   o n   t h e   v a r i o u s   i n t e r n a l   s y s t e m s   o f   t h e   h o u s e ,   t h e   f o u n d a t i o n ,   f r a m i n g ,   e l e c t r i c a l ,   p l u m b i n g ,   a n d   s o   o n .   H e   e n s u r e s   ( t e s t s )   t h a t   t h e   p a r t s   o f   t h e   h o u s e   w i l l   w o r k   c o r r e c t l y   a n d   s a f e l y ,   t h a t   i s ,   m e e t   t h e   b u i l d i n g   c o d e .   F u n c t i o n a l   t e s t s   i n   t h i s   s c e n a r i o   a r e   a n a l o g o u s   t o   t h e   h o m e o w n e r   v i s i t i n g   t h i s   s a m e   c o n s t r u c t i o n   s i t e .   H e   a s s u m e s   t h a t   t h e   i n t e r n a l   s y s t e m s   w i l l   b e h a v e   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 0         C h a p t e r   9           T e s t i n g     a p p r o p r i a t e l y ,   t h a t   t h e   b u i l d i n g   i n s p e c t o r   i s   p e r f o r m i n g   h i s   t a s k .   T h e   h o m e o w n e r   i s   f o c u s e d   o n   w h a t   i t   w i l l   b e   l i k e   t o   l i v e   i n   t h i s   h o u s e .   H e   i s   c o n c e r n e d   w i t h   h o w   t h e   h o u s e   l o o k s ,   a r e   t h e   v a r i o u s   r o o m s   a   c o m f o r t a b l e   s i z e ,   d o e s   t h e   h o u s e   f i t   t h e   f a m i l y ' s   n e e d s ,   a r e   t h e   w i n d o w s   i n   a   g o o d   s p o t   t o   c a t c h   t h e   m o r n i n g   s u n .   T h e   h o m e o w n e r   i s   p e r f o r m i n g   f u n c t i o n a l   t e s t s   o n   t h e   h o u s e .   H e   h a s   t h e   u s e r ' s   p e r s p e c t i v e .   T h e   b u i l d i n g   i n s p e c t o r   i s   p e r f o r m i n g   u n i t   t e s t s   o n   t h e   h o u s e .   H e   h a s   t h e   b u i l d e r ' s   p e r s p e c t i v e .   S o u r c e :   U n i t   T e s t i n g   v e r s u s   F u n c t i o n a l   T e s t s   I m   f o n d   o f   s a y i n g   A s   d e v e l o p e r s ,   w e   f a i l   i n   t w o   w a y s :   w e   b u i l d   t h e   t h i n g   w r o n g ,   o r   w e   b u i l d   t h e   w r o n g   t h i n g .   U n i t   t e s t s   e n s u r e   y o u   a r e   b u i l d i n g   t h e   t h i n g   r i g h t ;   f u n c t i o n a l   t e s t s   e n s u r e   y o u   a r e   b u i l d i n g   t h e   r i g h t   t h i n g .   S i n c e   f u n c t i o n a l   t e s t s   o p e r a t e   a t   t h e   s y s t e m   l e v e l ,   t h e y   m a y   r e q u i r e   s o m e   d e g r e e   o f   U I   a u t o m a t i o n .   L i k e   i n t e g r a t i o n   t e s t s ,   t h e y   u s u a l l y   w o r k   w i t h   t e s t   i n f r a s t r u c t u r e   a s   w e l l .   T h i s   m a k e s   t h e m   s l o w e r   a n d   m o r e   b r i t t l e   t h a n   u n i t   a n d   i n t e g r a t i o n   t e s t s .   Y o u   s h o u l d   h a v e   o n l y   a s   m a n y   f u n c t i o n a l   t e s t s   a s   y o u   n e e d   t o   b e   c o n f i d e n t   t h e   s y s t e m   i s   b e h a v i n g   a s   u s e r s   e x p e c t .   I n   A S P . N E T   C o r e   a p p l i c a t i o n s ,   u n i t   a n d   i n t e g r a t i o n   t e s t s   d o   n o t   t y p i c a l l y   e x e r c i s e   t h e   f u l l   M V C   s t a c k ,   a n d   t h u s   m a y   n o t   t e s t   f e a t u r e s   l i k e   r o u t i n g ,   m o d e l   b i n d i n g ,   m o d e l   v a l i d a t i o n ,   e t c .   F u n c t i o n a l   t e s t s   c a n   b e   u s e d   t o   v e r i f y   t h a t   t h e s e   U I   f r a m e w o r k   f e a t u r e s   a r e   i m p l e m e n t e d   c o r r e c t l y .   A n   e x a m p l e   o f   t h i s   k i n d   o f   t e s t   i s   s h o w n   a t   t h e   e n d   o f   t h i s   c h a p t e r .   T e s t i n g   P y r a m i d   M a r t i n   F o w l e r   w r o t e   a b o u t   t h e   t e s t i n g   p y r a m i d ,   a n   e x a m p l e   o f   w h i c h   i s   s h o w n   i n   F i g u r e   9 - 1 .     F i g u r e   9 - 1 .   T h e   T e s t i n g   P y r a m i d   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 1         C h a p t e r   9           T e s t i n g     T h e   d i f f e r e n t   l a y e r s   o f   t h e   p y r a m i d ,   a n d   t h e i r   r e l a t i v e   s i z e s ,   r e p r e s e n t   d i f f e r e n t   k i n d s   o f   t e s t s   a n d   h o w   m a n y   y o u   s h o u l d   w r i t e   f o r   y o u r   a p p l i c a t i o n .   A s   y o u   c a n   s e e ,   t h e   r e c o m m e n d a t i o n   i s   t o   h a v e   a   l a r g e   b a s e   o f   u n i t   t e s t s ,   s u p p o r t e d   b y   a   s m a l l e r   l a y e r   o f   i n t e g r a t i o n   t e s t s ,   w i t h   a n   e v e n   s m a l l e r   l a y e r   o f   f u n c t i o n a l   t e s t s .   E a c h   l a y e r   s h o u l d   i d e a l l y   o n l y   h a v e   t e s t s   i n   i t   t h a t   c a n n o t   b e   p e r f o r m e d   a d e q u a t e l y   a t   a   l o w e r   l a y e r .   K e e p   t h e   t e s t i n g   p y r a m i d   i n   m i n d   w h e n   y o u   a r e   t r y i n g   t o   d e c i d e   w h i c h   k i n d   o f   t e s t   y o u   n e e d   f o r   a   p a r t i c u l a r   s c e n a r i o .   W h a t   t o   T e s t   A   c o m m o n   p r o b l e m   f o r   d e v e l o p e r s   w h o   a r e   i n e x p e r i e n c e d   w i t h   w r i t i n g   a u t o m a t e d   t e s t s   i s   c o m i n g   u p   w i t h   w h a t   t o   t e s t .   A   g o o d   s t a r t i n g   p o i n t   i s   t o   t e s t   c o n d i t i o n a l   l o g i c .   A n y w h e r e   y o u   h a v e   a   m e t h o d   w i t h   b e h a v i o r   t h a t   c h a n g e s   b a s e d   o n   a   c o n d i t i o n a l   s t a t e m e n t   ( i f - e l s e ,   s w i t c h ,   e t c . ) ,   y o u   s h o u l d   b e   a b l e   t o   c o m e   u p   a t   l e a s t   a   c o u p l e   o f   t e s t s   t h a t   c o n f i r m   t h e   c o r r e c t   b e h a v i o r   f o r   c e r t a i n   c o n d i t i o n s .   I f   y o u r   c o d e   h a s   e r r o r   c o n d i t i o n s ,   i t s   g o o d   t o   w r i t e   a t   l e a s t   o n e   t e s t   f o r   t h e   h a p p y   p a t h   t h r o u g h   t h e   c o d e   ( w i t h   n o   e r r o r s ) ,   a n d   a t   l e a s t   o n e   t e s t   f o r   t h e   s a d   p a t h   ( w i t h   e r r o r s   o r   a t y p i c a l   r e s u l t s )   t o   c o n f i r m   y o u r   a p p l i c a t i o n   b e h a v e s   a s   e x p e c t e d   i n   t h e   f a c e   o f   e r r o r s .   F i n a l l y ,   t r y   t o   f o c u s   o n   t e s t i n g   t h i n g s   t h a t   c a n   f a i l ,   r a t h e r   t h a n   f o c u s i n g   o n   m e t r i c s   l i k e   c o d e   c o v e r a g e .   M o r e   c o d e   c o v e r a g e   i s   b e t t e r   t h a n   l e s s ,   g e n e r a l l y .   H o w e v e r ,   w r i t i n g   a   f e w   m o r e   t e s t s   o f   a   v e r y   c o m p l e x   a n d   b u s i n e s s - c r i t i c a l   m e t h o d   i s   u s u a l l y   a   b e t t e r   u s e   o f   t i m e   t h a n   w r i t i n g   t e s t s   f o r   a u t o - p r o p e r t i e s   j u s t   t o   i m p r o v e   t e s t   c o d e   c o v e r a g e   m e t r i c s .   O r g a n i z i n g   T e s t   P r o j e c t s   T e s t   p r o j e c t s   c a n   b e   o r g a n i z e d   h o w e v e r   w o r k s   b e s t   f o r   y o u .   I t s   a   g o o d   i d e a   t o   s e p a r a t e   t e s t s   b y   t y p e   ( u n i t   t e s t ,   i n t e g r a t i o n   t e s t )   a n d   b y   w h a t   t h e y   a r e   t e s t i n g   ( b y   p r o j e c t ,   b y   n a m e s p a c e ) .   W h e t h e r   t h i s   s e p a r a t i o n   c o n s i s t s   o f   f o l d e r s   w i t h i n   a   s i n g l e   t e s t   p r o j e c t ,   o r   m u l t i p l e   t e s t   p r o j e c t s ,   i s   a   d e s i g n   d e c i s i o n .   O n e   p r o j e c t   i s   s i m p l e s t ,   b u t   f o r   l a r g e   p r o j e c t s   w i t h   m a n y   t e s t s ,   o r   i n   o r d e r   t o   m o r e   e a s i l y   r u n   d i f f e r e n t   s e t s   o f   t e s t s ,   y o u   m i g h t   w a n t   t o   h a v e   s e v e r a l   d i f f e r e n t   t e s t   p r o j e c t s .   M a n y   t e a m s   o r g a n i z e   t e s t   p r o j e c t s   b a s e d   o n   t h e   p r o j e c t   t h e y   a r e   t e s t i n g ,   w h i c h   f o r   a p p l i c a t i o n s   w i t h   m o r e   t h a n   a   f e w   p r o j e c t s   c a n   r e s u l t   i n   a   l a r g e   n u m b e r   o f   t e s t   p r o j e c t s ,   e s p e c i a l l y   i f   y o u   s t i l l   b r e a k   t h e s e   d o w n   a c c o r d i n g   t o   w h a t   k i n d   o f   t e s t s   a r e   i n   e a c h   p r o j e c t .   A   c o m p r o m i s e   a p p r o a c h   i s   t o   h a v e   o n e   p r o j e c t   p e r   k i n d   o f   t e s t ,   p e r   a p p l i c a t i o n ,   w i t h   f o l d e r s   i n s i d e   t h e   t e s t   p r o j e c t s   t o   i n d i c a t e   t h e   p r o j e c t   ( a n d   c l a s s )   b e i n g   t e s t e d .   A   c o m m o n   a p p r o a c h   i s   t o   o r g a n i z e   t h e   a p p l i c a t i o n   p r o j e c t s   u n d e r   a   s r c   f o l d e r ,   a n d   t h e   a p p l i c a t i o n s   t e s t   p r o j e c t s   u n d e r   a   p a r a l l e l   t e s t s   f o l d e r .   Y o u   c a n   c r e a t e   m a t c h i n g   s o l u t i o n   f o l d e r s   i n   V i s u a l   S t u d i o ,   i f   y o u   f i n d   t h i s   o r g a n i z a t i o n   u s e f u l .   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 2         C h a p t e r   9           T e s t i n g       F i g u r e   9 - 2 .   T e s t   o r g a n i z a t i o n   i n   y o u r   s o l u t i o n   Y o u   c a n   u s e   w h i c h e v e r   t e s t   f r a m e w o r k   y o u   p r e f e r .   T h e   x U n i t   f r a m e w o r k   w o r k s   w e l l   a n d   i s   w h a t   a l l   o f   t h e   A S P . N E T   C o r e   a n d   E F   C o r e   t e s t s   a r e   w r i t t e n   i n .   Y o u   c a n   a d d   a n   x U n i t   t e s t   p r o j e c t   i n   V i s u a l   S t u d i o   u s i n g   t h e   t e m p l a t e   s h o w n   i n   F i g u r e   9 - 3 ,   o r   f r o m   t h e   C L I   u s i n g   d o t n e t   n e w   x u n i t .     F i g u r e   9 - 3 .   A d d   a n   x U n i t   T e s t   P r o j e c t   i n   V i s u a l   S t u d i o   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 3         C h a p t e r   9           T e s t i n g     T e s t   N a m i n g   Y o u   s h o u l d   n a m e   y o u r   t e s t s   i n   a   c o n s i s t e n t   f a s h i o n ,   w i t h   n a m e s   t h a t   i n d i c a t e   w h a t   e a c h   t e s t   d o e s .   O n e   a p p r o a c h   I v e   h a d   g r e a t   s u c c e s s   w i t h   i s   t o   n a m e   t e s t   c l a s s e s   a c c o r d i n g   t o   t h e   c l a s s   a n d   m e t h o d   t h e y   a r e   t e s t i n g .   T h i s   r e s u l t s   i n   m a n y   s m a l l   t e s t   c l a s s e s ,   b u t   i t   m a k e s   i t   e x t r e m e l y   c l e a r   w h a t   e a c h   t e s t   i s   r e s p o n s i b l e   f o r .   W i t h   t h e   t e s t   c l a s s   n a m e   s e t   u p   t o   i d e n t i f y   t h e   c l a s s   a n d   m e t h o d   t o   b e   t e s t e d ,   t h e   t e s t   m e t h o d   n a m e   c a n   b e   u s e d   t o   s p e c i f y   t h e   b e h a v i o r   b e i n g   t e s t e d .   T h i s   s h o u l d   i n c l u d e   t h e   e x p e c t e d   b e h a v i o r   a n d   a n y   i n p u t s   o r   a s s u m p t i o n s   t h a t   s h o u l d   y i e l d   t h i s   b e h a v i o r .   S o m e   e x a m p l e   t e s t   n a m e s :     C a t a l o g C o n t r o l l e r G e t I m a g e . C a l l s I m a g e S e r v i c e W i t h I d     C a t a l o g C o n t r o l l e r G e t I m a g e . L o g s W a r n i n g G i v e n I m a g e M i s s i n g E x c e p t i o n     C a t a l o g C o n t r o l l e r G e t I m a g e . R e t u r n s F i l e R e s u l t W i t h B y t e s G i v e n S u c c e s s     C a t a l o g C o n t r o l l e r G e t I m a g e . R e t u r n s N o t F o u n d R e s u l t G i v e n I m a g e M i s s i n g E x c e p t i o n   A   v a r i a t i o n   o f   t h i s   a p p r o a c h   e n d s   e a c h   t e s t   c l a s s   n a m e   w i t h   S h o u l d   a n d   m o d i f i e s   t h e   t e n s e   s l i g h t l y :     C a t a l o g C o n t r o l l e r G e t I m a g e S h o u l d . C a l l I m a g e S e r v i c e W i t h I d     C a t a l o g C o n t r o l l e r G e t I m a g e S h o u l d . L o g W a r n i n g G i v e n I m a g e M i s s i n g E x c e p t i o n   S o m e   t e a m s   f i n d   t h e   s e c o n d   n a m i n g   a p p r o a c h   c l e a r e r ,   t h o u g h   s l i g h t l y   m o r e   v e r b o s e .   I n   a n y   c a s e ,   t r y   t o   u s e   a   n a m i n g   c o n v e n t i o n   t h a t   p r o v i d e s   i n s i g h t   i n t o   t e s t   b e h a v i o r ,   s o   t h a t   w h e n   o n e   o r   m o r e   t e s t s   f a i l ,   i t s   o b v i o u s   f r o m   t h e i r   n a m e s   w h a t   c a s e s   h a v e   f a i l e d .   A v o i d   n a m i n g   y o u r   t e s t s   v a g u e l y ,   s u c h   a s   C o n t r o l l e r T e s t s . T e s t 1 ,   a s   t h e s e   o f f e r   n o   v a l u e   w h e n   y o u   s e e   t h e m   i n   t e s t   r e s u l t s .   I f   y o u   f o l l o w   a   n a m i n g   c o n v e n t i o n   l i k e   t h e   o n e   a b o v e   t h a t   p r o d u c e s   m a n y   s m a l l   t e s t   c l a s s e s ,   i t s   a   g o o d   i d e a   t o   f u r t h e r   o r g a n i z e   y o u r   t e s t s   u s i n g   f o l d e r s   a n d   n a m e s p a c e s .   F i g u r e   9 - 4   s h o w s   o n e   a p p r o a c h   t o   o r g a n i z i n g   t e s t s   b y   f o l d e r   w i t h i n   s e v e r a l   t e s t   p r o j e c t s .   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 4         C h a p t e r   9           T e s t i n g       F i g u r e   9 - 4 .   O r g a n i z i n g   t e s t   c l a s s e s   b y   f o l d e r   b a s e d   o n   c l a s s   b e i n g   t e s t e d .   O f   c o u r s e ,   i f   a   p a r t i c u l a r   a p p l i c a t i o n   c l a s s   h a s   m a n y   m e t h o d s   b e i n g   t e s t e d   ( a n d   t h u s   m a n y   t e s t   c l a s s e s ) ,   i t   m a y   m a k e   s e n s e   t o   p l a c e   t h e s e   i n   a   f o l d e r   c o r r e s p o n d i n g   t o   t h e   a p p l i c a t i o n   c l a s s .   T h i s   o r g a n i z a t i o n   i s   n o   d i f f e r e n t   t h a n   h o w   y o u   m i g h t   o r g a n i z e   f i l e s   i n t o   f o l d e r s   e l s e w h e r e .   I f   y o u   h a v e   m o r e   t h a n   t h r e e   o r   f o u r   r e l a t e d   f i l e s   i n   a   f o l d e r   c o n t a i n i n g   m a n y   o t h e r   f i l e s ,   i t s   o f t e n   h e l p f u l   t o   m o v e   t h e m   i n t o   t h e i r   o w n   s u b f o l d e r .   U n i t   T e s t i n g   A S P . N E T   C o r e   A p p s   I n   a   w e l l - d e s i g n e d   A S P . N E T   C o r e   a p p l i c a t i o n ,   m o s t   o f   t h e   c o m p l e x i t y   a n d   b u s i n e s s   l o g i c   w i l l   b e   e n c a p s u l a t e d   i n   b u s i n e s s   e n t i t i e s   a n d   a   v a r i e t y   o f   s e r v i c e s .   T h e   A S P . N E T   C o r e   M V C   a p p   i t s e l f ,   w i t h   i t s   c o n t r o l l e r s ,   f i l t e r s ,   v i e w m o d e l s ,   a n d   v i e w s ,   s h o u l d   r e q u i r e   v e r y   f e w   u n i t   t e s t s .   M u c h   o f   t h e   f u n c t i o n a l i t y   o f   a   g i v e n   a c t i o n   m e t h o d   o r   h a n d l e r   l i e s   o u t s i d e   t h e   m e t h o d   i t s e l f .   T e s t i n g   w h e t h e r   r o u t i n g   w o r k s   c o r r e c t l y ,   o r   g l o b a l   e r r o r   h a n d l i n g ,   c a n n o t   b e   d o n e   e f f e c t i v e l y   w i t h   a   u n i t   t e s t .   L i k e w i s e ,   a n y   f i l t e r s ,   i n c l u d i n g   m o d e l   v a l i d a t i o n   a n d   a u t h e n t i c a t i o n   a n d   a u t h o r i z a t i o n   f i l t e r s ,   c a n n o t   b e   u n i t   t e s t e d .   W i t h o u t   t h e s e   s o u r c e s   o f   b e h a v i o r ,   m o s t   h a n d l e r s   a n d   a c t i o n   m e t h o d s   s h o u l d   b e   t r i v i a l l y   s m a l l ,   d e l e g a t i n g   t h e   b u l k   o f   t h e i r   w o r k   t o   s e r v i c e s   t h a t   c a n   b e   t e s t e d   i n d e p e n d e n t   o f   t h e   c o n t r o l l e r s   o r   p a g e s   t h a t   u s e   t h e m .   S o m e t i m e s   y o u l l   n e e d   t o   r e f a c t o r   y o u r   c o d e   i n   o r d e r   t o   u n i t   t e s t   i t .   F r e q u e n t l y   t h i s   i n v o l v e s   i d e n t i f y i n g   a b s t r a c t i o n s   a n d   u s i n g   d e p e n d e n c y   i n j e c t i o n   t o   a c c e s s   t h e   a b s t r a c t i o n   i n   t h e   c o d e   y o u d   l i k e   t o   t e s t ,   r a t h e r   t h a n   c o d i n g   d i r e c t l y   a g a i n s t   i n f r a s t r u c t u r e .   F o r   e x a m p l e ,   c o n s i d e r   t h i s   s i m p l e   a c t i o n   m e t h o d   f o r   d i s p l a y i n g   i m a g e s :   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 5         C h a p t e r   9           T e s t i n g     [ H t t p G e t ( " [ c o n t r o l l e r ] / p i c / { i d } " ) ]   p u b l i c   I A c t i o n R e s u l t   G e t I m a g e ( i n t   i d )   {           v a r   c o n t e n t R o o t   =   _ e n v . C o n t e n t R o o t P a t h   +   " / / P i c s " ;           v a r   p a t h   =   P a t h . C o m b i n e ( c o n t e n t R o o t ,   i d   +   " . p n g " ) ;           B y t e [ ]   b   =   S y s t e m . I O . F i l e . R e a d A l l B y t e s ( p a t h ) ;           r e t u r n   F i l e ( b ,   " i m a g e / p n g " ) ;   }   U n i t   t e s t i n g   t h i s   m e t h o d   i s   m a d e   d i f f i c u l t   b y   i t s   d i r e c t   d e p e n d e n c y   o n   S y s t e m . I O . F i l e ,   w h i c h   i t   u s e s   t o   r e a d   f r o m   t h e   f i l e   s y s t e m .   Y o u   c a n   t e s t   t h i s   b e h a v i o r   t o   e n s u r e   i t   w o r k s   a s   e x p e c t e d   b u t   d o i n g   s o   w i t h   r e a l   f i l e s   i s   a n   i n t e g r a t i o n   t e s t .   I t s   w o r t h   n o t i n g   y o u   c a n t   t e s t   t h i s   m e t h o d s   r o u t e     y o u l l   s e e   h o w   t o   d o   t h i s   w i t h   a   f u n c t i o n a l   t e s t   s h o r t l y .   I f   y o u   c a n t   u n i t   t e s t   t h e   f i l e   s y s t e m   b e h a v i o r   d i r e c t l y ,   a n d   y o u   c a n t   t e s t   t h e   r o u t e ,   w h a t   i s   t h e r e   t o   t e s t ?   W e l l ,   a f t e r   r e f a c t o r i n g   t o   m a k e   u n i t   t e s t i n g   p o s s i b l e ,   y o u   m a y   d i s c o v e r   s o m e   t e s t   c a s e s   a n d   m i s s i n g   b e h a v i o r ,   s u c h   a s   e r r o r   h a n d l i n g .   W h a t   d o e s   t h e   m e t h o d   d o   w h e n   a   f i l e   i s n t   f o u n d ?   W h a t   s h o u l d   i t   d o ?   I n   t h i s   e x a m p l e ,   t h e   r e f a c t o r e d   m e t h o d   l o o k s   l i k e   t h i s :   [ H t t p G e t ( " [ c o n t r o l l e r ] / p i c / { i d } " ) ]   p u b l i c   I A c t i o n R e s u l t   G e t I m a g e ( i n t   i d )   {           b y t e [ ]   i m a g e B y t e s ;           t r y           {                   i m a g e B y t e s   =   _ i m a g e S e r v i c e . G e t I m a g e B y t e s B y I d ( i d ) ;           }           c a t c h   ( C a t a l o g I m a g e M i s s i n g E x c e p t i o n   e x )           {                   _ l o g g e r . L o g W a r n i n g ( $ " N o   i m a g e   f o u n d   f o r   i d :   { i d } " ) ;                   r e t u r n   N o t F o u n d ( ) ;           }           r e t u r n   F i l e ( i m a g e B y t e s ,   " i m a g e / p n g " ) ;   }   T h e   _ l o g g e r   a n d   _ i m a g e S e r v i c e   a r e   b o t h   i n j e c t e d   a s   d e p e n d e n c i e s .   N o w   y o u   c a n   t e s t   t h a t   t h e   s a m e   i d   t h a t   i s   p a s s e d   t o   t h e   a c t i o n   m e t h o d   i s   p a s s e d   t o   t h e   _ i m a g e S e r v i c e ,   a n d   t h a t   t h e   r e s u l t i n g   b y t e s   a r e   r e t u r n e d   a s   p a r t   o f   t h e   F i l e R e s u l t .   Y o u   c a n   a l s o   t e s t   t h a t   e r r o r   l o g g i n g   i s   h a p p e n i n g   a s   e x p e c t e d ,   a n d   t h a t   a   N o t F o u n d   r e s u l t   i s   r e t u r n e d   i f   t h e   i m a g e   i s   m i s s i n g ,   a s s u m i n g   t h i s   i s   i m p o r t a n t   a p p l i c a t i o n   b e h a v i o r   ( t h a t   i s ,   n o t   j u s t   t e m p o r a r y   c o d e   t h e   d e v e l o p e r   a d d e d   t o   d i a g n o s e   a n   i s s u e ) .   T h e   a c t u a l   f i l e   l o g i c   h a s   m o v e d   i n t o   a   s e p a r a t e   i m p l e m e n t a t i o n   s e r v i c e   a n d   h a s   b e e n   a u g m e n t e d   t o   r e t u r n   a n   a p p l i c a t i o n - s p e c i f i c   e x c e p t i o n   f o r   t h e   c a s e   o f   a   m i s s i n g   f i l e .   Y o u   c a n   t e s t   t h i s   i m p l e m e n t a t i o n   i n d e p e n d e n t l y ,   u s i n g   a n   i n t e g r a t i o n   t e s t .   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 6         C h a p t e r   9           T e s t i n g     I n t e g r a t i o n   T e s t i n g   A S P . N E T   C o r e   A p p s   M o s t   o f   t h e   i n t e g r a t i o n   t e s t s   i n   y o u r   A S P . N E T   C o r e   a p p s   s h o u l d   b e   t e s t i n g   s e r v i c e s   a n d   o t h e r   i m p l e m e n t a t i o n   t y p e s   d e f i n e d   i n   y o u r   I n f r a s t r u c t u r e   p r o j e c t .   T h e   b e s t   w a y   t o   t e s t   t h a t   y o u r   A S P . N E T   C o r e   M V C   p r o j e c t   i s   b e h a v i n g   c o r r e c t l y   i s   w i t h   f u n c t i o n a l   t e s t s   t h a t   r u n   a g a i n s t   y o u r   a p p   r u n n i n g   i n   a   t e s t   h o s t .   A n   e x a m p l e   o f   a n   i n t e g r a t i o n   t e s t   o f   a   d a t a   a c c e s s   c l a s s   i s   s h o w n   a b o v e .   F u n c t i o n a l   T e s t i n g   A S P . N E T   C o r e   A p p s   F o r   A S P . N E T   C o r e   a p p l i c a t i o n s ,   t h e   T e s t S e r v e r   c l a s s   m a k e s   f u n c t i o n a l   t e s t s   f a i r l y   e a s y   t o   w r i t e .   Y o u   c o n f i g u r e   a   T e s t S e r v e r   u s i n g   a   W e b H o s t B u i l d e r ,   d i r e c t l y   ( j u s t   a s   y o u   n o r m a l l y   d o   f o r   y o u r   a p p l i c a t i o n ) ,   o r   w i t h   t h e   W e b A p p l i c a t i o n F a c t o r y   t y p e   ( a v a i l a b l e   i n   2 . 1 ) .   Y o u   s h o u l d   t r y   t o   m a t c h   y o u r   t e s t   h o s t   t o   y o u r   p r o d u c t i o n   h o s t   a s   c l o s e l y   a s   p o s s i b l e ,   s o   y o u r   t e s t s   w i l l   e x e r c i s e   b e h a v i o r   s i m i l a r   t o   w h a t   t h e   a p p   w i l l   d o   i n   p r o d u c t i o n .   T h e   W e b A p p l i c a t i o n F a c t o r y   c l a s s   i s   h e l p f u l   f o r   c o n f i g u r i n g   t h e   T e s t S e r v e r s   C o n t e n t R o o t ,   w h i c h   i s   u s e d   b y   A S P . N E T   C o r e   t o   l o c a t e   s t a t i c   r e s o u r c e s   l i k e   V i e w s .   Y o u   c a n   c r e a t e   s i m p l e   f u n c t i o n a l   t e s t s   b y   c r e a t i n g   a   t e s t   c l a s s   t h a t   i m p l e m e n t s   I C l a s s F i x t u r e < W e b A p p l i c a t i o n F a c t o r y < T E n t r y > > ,   w h e r e   T E n t r y   i s   y o u r   a p p l i c a t i o n s   S t a r t u p   c l a s s .   W i t h   t h i s   i n   p l a c e ,   y o u r   t e s t   f i x t u r e   c a n   c r e a t e   a   c l i e n t   u s i n g   t h e   f a c t o r y s   C r e a t e C l i e n t   m e t h o d :   p u b l i c   c l a s s   B a s i c W e b T e s t s   :   I C l a s s F i x t u r e < W e b A p p l i c a t i o n F a c t o r y < S t a r t u p > >   {           p r o t e c t e d   r e a d o n l y   H t t p C l i e n t   _ c l i e n t ;             p u b l i c   B a s e W e b T e s t ( W e b A p p l i c a t i o n F a c t o r y < S t a r t u p >   f a c t o r y )           {                   _ c l i e n t   =   f a c t o r y . C r e a t e C l i e n t ( ) ;           }             / /   w r i t e   t e s t s   t h a t   u s e   _ c l i e n t   }   F r e q u e n t l y ,   y o u ' l l   w a n t   t o   p e r f o r m   s o m e   a d d i t i o n a l   c o n f i g u r a t i o n   o f   y o u r   s i t e   b e f o r e   e a c h   t e s t   r u n s ,   s u c h   a s   c o n f i g u r i n g   t h e   a p p l i c a t i o n   t o   u s e   a n   i n   m e m o r y   d a t a   s t o r e   a n d   t h e n   s e e d i n g   t h e   a p p l i c a t i o n   w i t h   t e s t   d a t a .   T o   d o   t h i s ,   y o u   s h o u l d   c r e a t e   y o u r   o w n   s u b c l a s s   o f   W e b A p p l i c a t i o n F a c t o r y < T E n t r y >   a n d   o v e r r i d e   i t s   C o n f i g u r e W e b H o s t   m e t h o d .   T h e   e x a m p l e   b e l o w   i s   f r o m   t h e   e S h o p O n W e b   F u n c t i o n a l T e s t s   p r o j e c t   a n d   i s   u s e d   a s   p a r t   o f   t h e   t e s t s   o n   t h e   m a i n   w e b   a p p l i c a t i o n .   u s i n g   I n f r a s t r u c t u r e . D a t a ;   u s i n g   M i c r o s o f t . A s p N e t C o r e . H o s t i n g ;   u s i n g   M i c r o s o f t . A s p N e t C o r e . M v c . T e s t i n g ;   u s i n g   M i c r o s o f t . e S h o p W e b ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 7         C h a p t e r   9           T e s t i n g     u s i n g   M i c r o s o f t . E x t e n s i o n s . D e p e n d e n c y I n j e c t i o n ;   u s i n g   M i c r o s o f t . E x t e n s i o n s . L o g g i n g ;   u s i n g   S y s t e m ;   u s i n g   M i c r o s o f t . E n t i t y F r a m e w o r k C o r e ;   u s i n g   I n f r a s t r u c t u r e . I d e n t i t y ;     n a m e s p a c e   F u n c t i o n a l T e s t s . W e b R a z o r P a g e s   {           p u b l i c   c l a s s   C u s t o m W e b R a z o r P a g e s A p p l i c a t i o n F a c t o r y < T S t a r t u p >           :   W e b A p p l i c a t i o n F a c t o r y < S t a r t u p >           {                   p r o t e c t e d   o v e r r i d e   v o i d   C o n f i g u r e W e b H o s t ( I W e b H o s t B u i l d e r   b u i l d e r )                   {                           b u i l d e r . C o n f i g u r e S e r v i c e s ( s e r v i c e s   = >                           {                                   / /   C r e a t e   a   n e w   s e r v i c e   p r o v i d e r .                                   v a r   s e r v i c e P r o v i d e r   =   n e w   S e r v i c e C o l l e c t i o n ( )                                           . A d d E n t i t y F r a m e w o r k I n M e m o r y D a t a b a s e ( )                                           . B u i l d S e r v i c e P r o v i d e r ( ) ;                                     / /   A d d   a   d a t a b a s e   c o n t e x t   ( A p p l i c a t i o n D b C o n t e x t )   u s i n g   a n   i n - m e m o r y                                   / /   d a t a b a s e   f o r   t e s t i n g .                                   s e r v i c e s . A d d D b C o n t e x t < C a t a l o g C o n t e x t > ( o p t i o n s   = >                                   {                                           o p t i o n s . U s e I n M e m o r y D a t a b a s e ( " I n M e m o r y D b F o r T e s t i n g " ) ;                                           o p t i o n s . U s e I n t e r n a l S e r v i c e P r o v i d e r ( s e r v i c e P r o v i d e r ) ;                                   } ) ;                                     s e r v i c e s . A d d D b C o n t e x t < A p p I d e n t i t y D b C o n t e x t > ( o p t i o n s   = >                                   {                                           o p t i o n s . U s e I n M e m o r y D a t a b a s e ( " I d e n t i t y " ) ;                                           o p t i o n s . U s e I n t e r n a l S e r v i c e P r o v i d e r ( s e r v i c e P r o v i d e r ) ;                                   } ) ;                                     / /   B u i l d   t h e   s e r v i c e   p r o v i d e r .                                   v a r   s p   =   s e r v i c e s . B u i l d S e r v i c e P r o v i d e r ( ) ;                                     / /   C r e a t e   a   s c o p e   t o   o b t a i n   a   r e f e r e n c e   t o   t h e   d a t a b a s e                                   / /   c o n t e x t   ( A p p l i c a t i o n D b C o n t e x t ) .   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 8         C h a p t e r   9           T e s t i n g                                     u s i n g   ( v a r   s c o p e   =   s p . C r e a t e S c o p e ( ) )                                   {                                           v a r   s c o p e d S e r v i c e s   =   s c o p e . S e r v i c e P r o v i d e r ;                                           v a r   d b   =   s c o p e d S e r v i c e s . G e t R e q u i r e d S e r v i c e < C a t a l o g C o n t e x t > ( ) ;                                           v a r   l o g g e r F a c t o r y   =   s c o p e d S e r v i c e s . G e t R e q u i r e d S e r v i c e < I L o g g e r F a c t o r y > ( ) ;                                             v a r   l o g g e r   =   s c o p e d S e r v i c e s                                                   . G e t R e q u i r e d S e r v i c e < I L o g g e r < C u s t o m W e b R a z o r P a g e s A p p l i c a t i o n F a c t o r y < T S t a r t u p > > > ( ) ;                                             / /   E n s u r e   t h e   d a t a b a s e   i s   c r e a t e d .                                           d b . D a t a b a s e . E n s u r e C r e a t e d ( ) ;                                             t r y                                           {                                                   / /   S e e d   t h e   d a t a b a s e   w i t h   t e s t   d a t a .                                                   C a t a l o g C o n t e x t S e e d . S e e d A s y n c ( d b ,   l o g g e r F a c t o r y ) . W a i t ( ) ;                                           }                                           c a t c h   ( E x c e p t i o n   e x )                                           {                                                   l o g g e r . L o g E r r o r ( e x ,   $ " A n   e r r o r   o c c u r r e d   s e e d i n g   t h e   "   +                                                           " d a t a b a s e   w i t h   t e s t   m e s s a g e s .   E r r o r :   { e x . M e s s a g e } " ) ;                                           }                                   }                           } ) ;                   }           }   }     T e s t s   c a n   m a k e   u s e   o f   t h i s   c u s t o m   W e b A p p l i c a t i o n F a c t o r y   b y   u s i n g   i t   t o   c r e a t e   a   c l i e n t   a n d   t h e n   m a k i n g   r e q u e s t s   t o   t h e   a p p l i c a t i o n   u s i n g   t h i s   c l i e n t   i n s t a n c e .   T h e   a p p l i c a t i o n   w i l l   h a v e   d a t a   s e e d e d   t h a t   c a n   b e   u s e d   a s   p a r t   o f   t h e   t e s t ' s   a s s e r t i o n s .   T h i s   t e s t   v e r i f i e s   t h a t   t h e   h o m e   p a g e   o f   t h e   e S h o p O n W e b   R a z o r   P a g e s   a p p l i c a t i o n   l o a d s   c o r r e c t l y   a n d   i n c l u d e s   a   p r o d u c t   l i s t i n g   t h a t   w a s   a d d e d   t o   t h e   a p p l i c a t i o n   a s   p a r t   o f   t h e   s e e d   d a t a .     u s i n g   M i c r o s o f t . e S h o p W e b . R a z o r P a g e s ;   u s i n g   S y s t e m . N e t . H t t p ;   Evaluation Warning: The document was created with Spire.PDF for .NET
    9 9         C h a p t e r   9           T e s t i n g     u s i n g   S y s t e m . T h r e a d i n g . T a s k s ;   u s i n g   X u n i t ;     n a m e s p a c e   F u n c t i o n a l T e s t s . W e b R a z o r P a g e s   {           p u b l i c   c l a s s   H o m e P a g e O n G e t   :   I C l a s s F i x t u r e < C u s t o m W e b R a z o r P a g e s A p p l i c a t i o n F a c t o r y < S t a r t u p > >           {                   p u b l i c   H o m e P a g e O n G e t ( C u s t o m W e b R a z o r P a g e s A p p l i c a t i o n F a c t o r y < S t a r t u p >   f a c t o r y )                   {                           C l i e n t   =   f a c t o r y . C r e a t e C l i e n t ( ) ;                   }                     p u b l i c   H t t p C l i e n t   C l i e n t   {   g e t ;   }                     [ F a c t ]                   p u b l i c   a s y n c   T a s k   R e t u r n s H o m e P a g e W i t h P r o d u c t L i s t i n g ( )                   {                           / /   A r r a n g e   &   A c t                           v a r   r e s p o n s e   =   a w a i t   C l i e n t . G e t A s y n c ( " / " ) ;                           r e s p o n s e . E n s u r e S u c c e s s S t a t u s C o d e ( ) ;                           v a r   s t r i n g R e s p o n s e   =   a w a i t   r e s p o n s e . C o n t e n t . R e a d A s S t r i n g A s y n c ( ) ;                             / /   A s s e r t                           A s s e r t . C o n t a i n s ( " . N E T   B o t   B l a c k   S w e a t s h i r t " ,   s t r i n g R e s p o n s e ) ;   / /   f r o m   s e e d   d a t a                   }           }   }     T h i s   f u n c t i o n a l   t e s t   e x e r c i s e s   t h e   f u l l   A S P . N E T   C o r e   M V C   /   R a z o r   P a g e s   a p p l i c a t i o n   s t a c k ,   i n c l u d i n g   a l l   m i d d l e w a r e ,   f i l t e r s ,   b i n d e r s ,   e t c .   t h a t   m a y   b e   i n   p l a c e .   I t   v e r i f i e s   t h a t   a   g i v e n   r o u t e   ( " / " )   r e t u r n s   t h e   e x p e c t e d   s u c c e s s   s t a t u s   c o d e   a n d   H T M L   o u t p u t .   I t   d o e s   s o   w i t h o u t   s e t t i n g   u p   a   r e a l   w e b   s e r v e r ,   a n d   s o   a v o i d s   m u c h   o f   t h e   b r i t t l e n e s s   t h a t   u s i n g   a   r e a l   w e b   s e r v e r   f o r   t e s t i n g   c a n   e x p e r i e n c e   ( f o r   e x a m p l e ,   p r o b l e m s   w i t h   f i r e w a l l   s e t t i n g s   o r   a v a i l a b i l i t y   o f   p o r t s ) .   F u n c t i o n a l   t e s t s   t h a t   r u n   a g a i n s t   T e s t S e r v e r   a r e   u s u a l l y   s l o w e r   t h a n   i n t e g r a t i o n   a n d   u n i t   t e s t s ,   b u t   a r e   m u c h   f a s t e r   t h a n   t e s t s   t h a t   w o u l d   r u n   o v e r   t h e   n e t w o r k   t o   a   t e s t   w e b   s e r v e r .   Y o u   s h o u l d   u s e   f u n c t i o n a l   t e s t s   t o   e n s u r e   y o u r   a p p l i c a t i o n ' s   f r o n t   e n d   s t a c k   i s   w o r k i n g   a s   e x p e c t e d .   T h e s e   t e s t s   a r e   e s p e c i a l l y   u s e f u l   w h e n   y o u   f i n d   d u p l i c a t i o n   i n   y o u r   c o n t r o l l e r s   o r   p a g e s   a n d   y o u   a d d r e s s   t h e   d u p l i c a t i o n   b y   a d d i n g   f i l t e r s .   I d e a l l y ,   s u c h   a   r e f a c t o r i n g   s h o u l d   n o t   c h a n g e   t h e   b e h a v i o r   o f   t h e   a p p l i c a t i o n ,   a n d   a   s u i t e   o f   f u n c t i o n a l   t e s t s   w o u l d   b e   a b l e   t o   v e r i f y   t h i s   i s   t h e   c a s e . Evaluation Warning: The document was created with Spire.PDF for .NET
      1 0 0         C h a p t e r   1 0           S E C T I O N       1 0     D e v e l o p m e n t   p r o c e s s   f o r   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p l i c a t i o n s   W i t h   t h e   c l o u d ,   i n d i v i d u a l s   a n d   s m a l l   b u s i n e s s e s   c a n   s n a p   t h e i r   f i n g e r s   a n d   i n s t a n t l y   s e t   u p   e n t e r p r i s e - c l a s s   s e r v i c e s .   R o y   S t e p h a n   V i s i o n   D e v e l o p   w e l l - d e s i g n e d   A S P   . N E T   C o r e   a p p l i c a t i o n s   t h e   w a y   y o u   l i k e ,   u s i n g   V i s u a l   S t u d i o   o r   t h e   d o t n e t   C L I   a n d   V i s u a l   S t u d i o   C o d e   o r   y o u r   e d i t o r   o f   c h o i c e .   D e v e l o p m e n t   e n v i r o n m e n t   f o r   A S P . N E T   C o r e   a p p s   D e v e l o p m e n t   t o o l s   c h o i c e s :   I D E   o r   e d i t o r   W h e t h e r   y o u   p r e f e r   a   f u l l   a n d   p o w e r f u l   I D E   o r   a   l i g h t w e i g h t   a n d   a g i l e   e d i t o r ,   M i c r o s o f t   h a s   y o u   c o v e r e d   w h e n   d e v e l o p i n g   A S P . N E T   C o r e   a p p l i c a t i o n s .   V i s u a l   S t u d i o   2 0 1 7 .   I f   y o u r e   u s i n g   V i s u a l   S t u d i o   2 0 1 7   y o u   c a n   b u i l d   A S P . N E T   C o r e   a p p l i c a t i o n s   a s   l o n g   a s   y o u   h a v e   t h e   . N E T   C o r e   c r o s s - p l a t f o r m   d e v e l o p m e n t   w o r k l o a d   i n s t a l l e d .   F i g u r e   1 0 - 1   s h o w s   t h e   r e q u i r e d   w o r k l o a d   i n   t h e   V i s u a l   S t u d i o   2 0 1 7   s e t u p   d i a l o g .     Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 1         C h a p t e r   1 0           D e v e l o p m e n t   P r o c e s s   f o r   A z u r e     F i g u r e   1 0 - 1 .   I n s t a l l i n g   t h e   . N E T   C o r e   w o r k l o a d   i n   V i s u a l   S t u d i o   2 0 1 7 .     D o w n l o a d   V i s u a l   S t u d i o   2 0 1 7   V i s u a l   S t u d i o   C o d e   a n d   d o t n e t   C L I   ( C r o s s - P l a t f o r m   T o o l s   f o r   M a c ,   L i n u x   a n d   W i n d o w s ) .   I f   y o u   p r e f e r   a   l i g h t w e i g h t   a n d   c r o s s - p l a t f o r m   e d i t o r   s u p p o r t i n g   a n y   d e v e l o p m e n t   l a n g u a g e ,   y o u   c a n   u s e   M i c r o s o f t   V i s u a l   S t u d i o   C o d e   a n d   t h e   d o t n e t   C L I .   T h e s e   p r o d u c t s   p r o v i d e   a   s i m p l e   y e t   r o b u s t   e x p e r i e n c e   t h a t   s t r e a m l i n e s   t h e   d e v e l o p e r   w o r k f l o w .   A d d i t i o n a l l y ,   V i s u a l   S t u d i o   C o d e   s u p p o r t s   e x t e n s i o n s   f o r   C #   a n d   w e b   d e v e l o p m e n t ,   p r o v i d i n g   i n t e l l i s e n s e   a n d   s h o r t c u t - t a s k s   w i t h i n   t h e   e d i t o r .     D o w n l o a d   t h e   . N E T   C o r e   S D K   D o w n l o a d   V i s u a l   S t u d i o   C o d e       D e v e l o p m e n t   w o r k f l o w   f o r   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p s   T h e   a p p l i c a t i o n   d e v e l o p m e n t   l i f e c y c l e   s t a r t s   f r o m   e a c h   d e v e l o p e r s   m a c h i n e ,   c o d i n g   t h e   a p p   u s i n g   t h e i r   p r e f e r r e d   l a n g u a g e   a n d   t e s t i n g   i t   l o c a l l y .   D e v e l o p e r s   m a y   c h o o s e   t h e i r   p r e f e r r e d   s o u r c e   c o n t r o l   s y s t e m   a n d   c a n   c o n f i g u r e   C o n t i n u o u s   I n t e g r a t i o n   ( C I )   a n d / o r   C o n t i n u o u s   D e l i v e r y / D e p l o y m e n t   ( C D )   u s i n g   a   b u i l d   s e r v e r   o r   b a s e d   o n   b u i l t - i n   A z u r e   f e a t u r e s .   T o   g e t   s t a r t e d   w i t h   d e v e l o p i n g   a n   A S P . N E T   C o r e   a p p l i c a t i o n   u s i n g   C I / C D ,   y o u   c a n   u s e   V i s u a l   S t u d i o   T e a m   S e r v i c e s   o r   y o u r   o r g a n i z a t i o n s   o w n   T e a m   F o u n d a t i o n   S e r v e r   ( T F S ) .   I n i t i a l   S e t u p   T o   c r e a t e   a   r e l e a s e   p i p e l i n e   f o r   y o u r   a p p ,   y o u   n e e d   t o   h a v e   y o u r   a p p l i c a t i o n   c o d e   i n   s o u r c e   c o n t r o l .   S e t   u p   a   l o c a l   r e p o s i t o r y   a n d   c o n n e c t   i t   t o   a   r e m o t e   r e p o s i t o r y   i n   a   t e a m   p r o j e c t .   F o l l o w   t h e s e   i n s t r u c t i o n s :   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 2         C h a p t e r   1 0           D e v e l o p m e n t   P r o c e s s   f o r   A z u r e       S h a r e   y o u r   c o d e   w i t h   G i t   a n d   V i s u a l   S t u d i o   o r     S h a r e   y o u r   c o d e   w i t h   T F V C   a n d   V i s u a l   S t u d i o   C r e a t e   a n   A z u r e   A p p   S e r v i c e   w h e r e   y o u l l   d e p l o y   y o u r   a p p l i c a t i o n .   C r e a t e   a   W e b   A p p   b y   g o i n g   t o   t h e   A p p   S e r v i c e s   b l a d e   o n   t h e   A z u r e   p o r t a l .   C l i c k   + A d d ,   s e l e c t   t h e   W e b   A p p   t e m p l a t e ,   c l i c k   C r e a t e ,   a n d   p r o v i d e   a   n a m e   a n d   o t h e r   d e t a i l s .   T h e   w e b   a p p   w i l l   b e   a c c e s s i b l e   f r o m   { n a m e } . a z u r e w e b s i t e s . n e t .     F i g u r e   1 0 - 2 .   C r e a t i n g   a   n e w   A z u r e   A p p   S e r v i c e   W e b   A p p   i n   t h e   A z u r e   P o r t a l .   Y o u r   C I   b u i l d   p r o c e s s   w i l l   p e r f o r m   a n   a u t o m a t e d   b u i l d   w h e n e v e r   n e w   c o d e   i s   c o m m i t t e d   t o   t h e   p r o j e c t s   s o u r c e   c o n t r o l   r e p o s i t o r y .   T h i s   g i v e s   y o u   i m m e d i a t e   f e e d b a c k   t h a t   t h e   c o d e   b u i l d s   ( a n d ,   i d e a l l y ,   p a s s e s   a u t o m a t e d   t e s t s )   a n d   c a n   p o t e n t i a l l y   b e   d e p l o y e d .   T h i s   C I   b u i l d   w i l l   p r o d u c e   a   w e b   d e p l o y   p a c k a g e   a r t i f a c t   a n d   p u b l i s h   i t   f o r   c o n s u m p t i o n   b y   y o u r   C D   p r o c e s s .   D e f i n e   y o u r   C I   b u i l d   p r o c e s s   B e   s u r e   t o   e n a b l e   c o n t i n u o u s   i n t e g r a t i o n   s o   t h e   s y s t e m   w i l l   q u e u e   a   b u i l d   w h e n e v e r   s o m e o n e   o n   y o u r   t e a m   c o m m i t s   n e w   c o d e .   T e s t   t h e   b u i l d   a n d   v e r i f y   t h a t   i t   i s   p r o d u c i n g   a   w e b   d e p l o y   p a c k a g e   a s   o n e   o f   i t s   a r t i f a c t s .   W h e n   a   b u i l d   s u c c e e d s ,   y o u r   C D   p r o c e s s   w i l l   d e p l o y   t h e   r e s u l t s   o f   y o u r   C I   b u i l d   t o   y o u r   A z u r e   w e b   a p p .   T o   c o n f i g u r e   t h i s ,   y o u   c r e a t e   a n d   c o n f i g u r e   a   R e l e a s e ,   w h i c h   w i l l   d e p l o y   t o   y o u r   A z u r e   A p p   S e r v i c e .   D e f i n e   y o u r   C D   r e l e a s e   p r o c e s s   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 3         C h a p t e r   1 0           D e v e l o p m e n t   P r o c e s s   f o r   A z u r e     O n c e   y o u r   C I / C D   p i p e l i n e   i s   c o n f i g u r e d ,   y o u   c a n   s i m p l y   m a k e   u p d a t e s   t o   y o u r   w e b   a p p   a n d   c o m m i t   t h e m   t o   s o u r c e   c o n t r o l   t o   h a v e   t h e m   d e p l o y e d .   W o r k f l o w   f o r   d e v e l o p i n g   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p l i c a t i o n s   O n c e   y o u   h a v e   c o n f i g u r e d   y o u r   A z u r e   a c c o u n t   a n d   y o u r   C I / C D   p r o c e s s ,   d e v e l o p i n g   A z u r e - h o s t e d   A S P . N E T   C o r e   a p p l i c a t i o n s   i s   s i m p l e .   T h e   f o l l o w i n g   a r e   t h e   b a s i c   s t e p s   y o u   u s u a l l y   t a k e   w h e n   b u i l d i n g   a n   A S P . N E T   C o r e   a p p ,   h o s t e d   i n   A z u r e   A p p   S e r v i c e   a s   a   W e b   A p p ,   a s   i l l u s t r a t e d   i n   F i g u r e   1 0 - X .       F i g u r e   1 0 - 3 .   S t e p - b y - s t e p   w o r k f l o w   f o r   b u i l d i n g   A S P . N E T   C o r e   a p p s   a n d   h o s t i n g   t h e m   i n   A z u r e .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 4         C h a p t e r   1 0           D e v e l o p m e n t   P r o c e s s   f o r   A z u r e     S t e p   1 .   L o c a l   D e v   E n v i r o n m e n t   I n n e r   L o o p   D e v e l o p i n g   y o u r   A S P . N E T   C o r e   a p p l i c a t i o n   f o r   d e p l o y m e n t   t o   A z u r e   i s   n o   d i f f e r e n t   f r o m   d e v e l o p i n g   y o u r   a p p l i c a t i o n   o t h e r w i s e .   U s e   t h e   l o c a l   d e v e l o p m e n t   e n v i r o n m e n t   y o u r e   c o m f o r t a b l e   w i t h ,   w h e t h e r   t h a t s   V i s u a l   S t u d i o   2 0 1 7   o r   t h e   d o t n e t   C L I   a n d   V i s u a l   S t u d i o   C o d e   o r   y o u r   p r e f e r r e d   e d i t o r .   Y o u   c a n   w r i t e   c o d e ,   r u n   a n d   d e b u g   y o u r   c h a n g e s ,   r u n   a u t o m a t e d   t e s t s ,   a n d   m a k e   l o c a l   c o m m i t s   t o   s o u r c e   c o n t r o l   u n t i l   y o u r e   r e a d y   t o   p u s h   y o u r   c h a n g e s   t o   y o u r   s h a r e d   s o u r c e   c o n t r o l   r e p o s i t o r y .   S t e p   2 .   A p p l i c a t i o n   C o d e   R e p o s i t o r y   W h e n e v e r   y o u r e   r e a d y   t o   s h a r e   y o u r   c o d e   w i t h   y o u r   t e a m ,   y o u   s h o u l d   p u s h   y o u r   c h a n g e s   f r o m   y o u r   l o c a l   s o u r c e   r e p o s i t o r y   t o   y o u r   t e a m s   s h a r e d   s o u r c e   r e p o s i t o r y .   I f   y o u v e   b e e n   w o r k i n g   i n   a   c u s t o m   b r a n c h ,   t h i s   s t e p   u s u a l l y   i n v o l v e s   m e r g i n g   y o u r   c o d e   i n t o   a   s h a r e d   b r a n c h   ( p e r h a p s   b y   m e a n s   o f   a   p u l l   r e q u e s t ) .   S t e p   3 .   B u i l d   S e r v e r :   C o n t i n u o u s   I n t e g r a t i o n .   B u i l d ,   T e s t ,   P a c k a g e   A   n e w   b u i l d   i s   t r i g g e r e d   o n   t h e   b u i l d   s e r v e r   w h e n e v e r   a   n e w   c o m m i t   i s   m a d e   t o   t h e   s h a r e d   a p p l i c a t i o n   c o d e   r e p o s i t o r y .   A s   p a r t   o f   t h e   C I   p r o c e s s ,   t h i s   b u i l d   s h o u l d   f u l l y   c o m p i l e   t h e   a p p l i c a t i o n   a n d   r u n   a u t o m a t e d   t e s t s   t o   c o n f i r m   e v e r y t h i n g   i s   w o r k i n g   a s   e x p e c t e d .   T h e   e n d   r e s u l t   o f   t h e   C I   p r o c e s s   s h o u l d   b e   a   p a c k a g e d   v e r s i o n   o f   t h e   w e b   a p p ,   r e a d y   f o r   d e p l o y m e n t .   S t e p   4 .   B u i l d   S e r v e r :   C o n t i n u o u s   D e l i v e r y   O n c e   a   b u i l d   a s   s u c c e e d e d ,   t h e   C D   p r o c e s s   w i l l   p i c k   u p   t h e   b u i l d   a r t i f a c t s   p r o d u c e d .   T h i s   w i l l   i n c l u d e   a   w e b   d e p l o y   p a c k a g e .   T h e   b u i l d   s e r v e r   w i l l   d e p l o y   t h i s   p a c k a g e   t o   A z u r e   A p p   S e r v i c e ,   r e p l a c i n g   a n y   e x i s t i n g   s e r v i c e   w i t h   t h e   n e w l y   c r e a t e d   o n e .   T y p i c a l l y   t h i s   s t e p   t a r g e t s   a   s t a g i n g   e n v i r o n m e n t ,   b u t   s o m e   a p p l i c a t i o n s   d e p l o y   d i r e c t l y   t o   p r o d u c t i o n   t h r o u g h   a   C D   p r o c e s s .   S t e p   5 .   A z u r e   A p p   S e r v i c e .   W e b   A p p .   O n c e   d e p l o y e d ,   t h e   A S P . N E T   C o r e   a p p l i c a t i o n   r u n s   w i t h i n   t h e   c o n t e x t   o f   a n   A z u r e   A p p   S e r v i c e   W e b   A p p .   T h i s   W e b   A p p   c a n   b e   m o n i t o r e d   a n d   f u r t h e r   c o n f i g u r e d   u s i n g   t h e   A z u r e   P o r t a l .   S t e p   6 .   P r o d u c t i o n   M o n i t o r i n g   a n d   D i a g n o s t i c s   W h i l e   t h e   W e b   A p p   i s   r u n n i n g ,   y o u   c a n   m o n i t o r   t h e   h e a l t h   o f   t h e   a p p l i c a t i o n   a n d   c o l l e c t   d i a g n o s t i c s   a n d   u s e r   b e h a v i o r   d a t a .   A p p l i c a t i o n   I n s i g h t s   i s   i n c l u d e d   i n   V i s u a l   S t u d i o ,   a n d   o f f e r s   a u t o m a t i c   i n s t r u m e n t a t i o n   f o r   A S P . N E T   a p p s .   I t   c a n   p r o v i d e   y o u   w i t h   i n f o r m a t i o n   o n   u s a g e ,   e x c e p t i o n s ,   r e q u e s t s ,   p e r f o r m a n c e ,   a n d   l o g s .     R e f e r e n c e s   B u i l d   a n d   D e p l o y   Y o u r   A S P . N E T   C o r e   A p p   t o   A z u r e   h t t p s : / / w w w . v i s u a l s t u d i o . c o m / e n - u s / d o c s / b u i l d / a p p s / a s p n e t / a s p n e t c o r e - t o - a z u r e     Evaluation Warning: The document was created with Spire.PDF for .NET
      1 0 5         C h a p t e r   1 1           A z u r e   H o s t i n g   R e c o m m e n d a t i o n s           S E C T I O N       1 1     A z u r e   H o s t i n g   R e c o m m e n d a t i o n s   f o r   A S P . N E T   C o r e   W e b   A p p s   L i n e - o f - b u s i n e s s   l e a d e r s   e v e r y w h e r e   a r e   b y p a s s i n g   I T   d e p a r t m e n t s   t o   g e t   a p p l i c a t i o n s   f r o m   t h e   c l o u d   ( a k a   S a a S )   a n d   p a y i n g   f o r   t h e m   l i k e   t h e y   w o u l d   a   m a g a z i n e   s u b s c r i p t i o n .   A n d   w h e n   t h e   s e r v i c e   i s   n o   l o n g e r   r e q u i r e d ,   t h e y   c a n   c a n c e l   t h e   s u b s c r i p t i o n   w i t h   n o   e q u i p m e n t   l e f t   u n u s e d   i n   t h e   c o r n e r .   D a r y l   P l u m m e r ,   G a r t n e r   a n a l y s t     S u m m a r y   W h a t e v e r   y o u r   a p p l i c a t i o n s   n e e d s   a n d   a r c h i t e c t u r e ,   W i n d o w s   A z u r e   c a n   s u p p o r t   i t .   Y o u r   h o s t i n g   n e e d s   c a n   b e   a s   s i m p l e   a s   a   s t a t i c   w e b   s i t e   t o   a n   e x t r e m e l y   s o p h i s t i c a t e d   a p p l i c a t i o n   m a d e   u p   o f   d o z e n s   o f   s e r v i c e s .   F o r   A S P . N E T   C o r e   m o n o l i t h i c   w e b   a p p l i c a t i o n s   a n d   s u p p o r t i n g   s e r v i c e s ,   t h e r e   a r e   s e v e r a l   w e l l - k n o w n   c o n f i g u r a t i o n s   t h a t   a r e   r e c o m m e n d e d .   T h e   r e c o m m e n d a t i o n s   b e l o w   a r e   g r o u p e d   a c c o r d i n g   t o   t h e   k i n d   o f   r e s o u r c e   t o   b e   h o s t e d ,   w h e t h e r   f u l l   a p p l i c a t i o n s ,   i n d i v i d u a l   p r o c e s s e s ,   o r   d a t a .     W e b   A p p l i c a t i o n s   W e b   a p p l i c a t i o n s   c a n   b e   h o s t e d   w i t h :     A p p   S e r v i c e   W e b   A p p s   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 6         C h a p t e r   1 1           A z u r e   H o s t i n g   R e c o m m e n d a t i o n s       C o n t a i n e r s     A z u r e   S e r v i c e   F a b r i c     V i r t u a l   M a c h i n e s   ( V M s )   O f   t h e s e ,   A p p   S e r v i c e   W e b   A p p s   a r e   t h e   r e c o m m e n d e d   a p p r o a c h   f o r   m o s t   s c e n a r i o s .   F o r   m i c r o s e r v i c e   a r c h i t e c t u r e s ,   c o n s i d e r   a   c o n t a i n e r - b a s e d   a p p r o a c h ,   o r   S e r v i c e   F a b r i c .   I f   y o u   n e e d   m o r e   c o n t r o l   o v e r   t h e   m a c h i n e s   r u n n i n g   y o u r   a p p l i c a t i o n ,   c o n s i d e r   A z u r e   V i r t u a l   M a c h i n e s .   A p p   S e r v i c e   W e b   A p p s   A p p   S e r v i c e   W e b   A p p s   o f f e r s   a   f u l l y   m a n a g e d   p l a t f o r m   o p t i m i z e d   f o r   h o s t i n g   w e b   a p p l i c a t i o n s .   I t s   a   p l a t f o r m   a s   a   s e r v i c e ( P a a S )   o f f e r i n g   t h a t   l e t s   y o u   f o c u s   o n   y o u r   b u s i n e s s   l o g i c ,   w h i l e   A z u r e   t a k e s   c a r e   o f   t h e   i n f r a s t r u c t u r e   n e e d e d   t o   r u n   a n d   s c a l e   t h e   a p p .   S o m e   k e y   f e a t u r e s   o f   A p p   S e r v i c e   W e b   A p p s :     D e v O p s   o p t i m i z a t i o n   ( c o n t i n u o u s   i n t e g r a t i o n   a n d   d e l i v e r y ,   m u l t i p l e   e n v i r o n m e n t s ,   A / B   t e s t i n g ,   s c r i p t i n g   s u p p o r t )     G l o b a l   s c a l e   a n d   h i g h   a v a i l a b i l i t y     C o n n e c t i o n s   t o   S a a S   p l a t f o r m s   a n d   y o u r   o n - p r e m i s e s   d a t a     S e c u r i t y   a n d   c o m p l i a n c e     V i s u a l   S t u d i o   i n t e g r a t i o n   A z u r e   A p p   S e r v i c e   i s   t h e   b e s t   c h o i c e   f o r   m o s t   w e b   a p p s .   D e p l o y m e n t   a n d   m a n a g e m e n t   a r e   i n t e g r a t e d   i n t o   t h e   p l a t f o r m ,   s i t e s   c a n   s c a l e   q u i c k l y   t o   h a n d l e   h i g h   t r a f f i c   l o a d s ,   a n d   t h e   b u i l t - i n   l o a d   b a l a n c i n g   a n d   t r a f f i c   m a n a g e r   p r o v i d e   h i g h   a v a i l a b i l i t y .   Y o u   c a n   m o v e   e x i s t i n g   s i t e s   t o   A z u r e   A p p   S e r v i c e   e a s i l y   w i t h   a n   o n l i n e   m i g r a t i o n   t o o l ,   u s e   a n   o p e n - s o u r c e   a p p   f r o m   t h e   W e b   A p p l i c a t i o n   G a l l e r y ,   o r   c r e a t e   a   n e w   s i t e   u s i n g   t h e   f r a m e w o r k   a n d   t o o l s   o f   y o u r   c h o i c e .   T h e   W e b J o b s   f e a t u r e   m a k e s   i t   e a s y   t o   a d d   b a c k g r o u n d   j o b   p r o c e s s i n g   t o   y o u r   A p p   S e r v i c e   w e b   a p p .   A z u r e   C o n t a i n e r   I n s t a n c e s   T h e   s i m p l e s t   w a y   t o   u s e   a   c o n t a i n e r   i n   A z u r e   i s   w i t h   A z u r e   C o n t a i n e r   I n s t a n c e s   ( A C I ) .   A C I   a l l o w s   s i m p l e   d e p l o y m e n t   o f   c o n t a i n e r   i n s t a n c e s   w i t h   c o n f i g u r e d   a m o u n t s   o f   p r o c e s s o r   a n d   m e m o r y .   A C I   i s   b e s t   u s e d   f o r   t e s t i n g   p u r p o s e s ,   s i n c e   i t   l a c k s   m a n y   o f   t h e   f e a t u r e s   a   p r o d u c t i o n   a p p l i c a t i o n   m i g h t   r e q u i r e .   A z u r e   K u b e r n e t e s   S e r v i c e   A z u r e   K u b e r n e t e s   S e r v i c e   ( A K S )   m a n a g e s   y o u r   h o s t e d   K u b e r n e t e s   e n v i r o n m e n t ,   m a k i n g   i t   q u i c k   a n d   e a s y   t o   d e p l o y   a n d   m a n a g e   c o n t a i n e r i z e d   a p p l i c a t i o n s   w i t h o u t   c o n t a i n e r   o r c h e s t r a t i o n   e x p e r t i s e .   I t   a l s o   e l i m i n a t e s   t h e   b u r d e n   o f   o n g o i n g   o p e r a t i o n s   a n d   m a i n t e n a n c e   b y   p r o v i s i o n i n g ,   u p g r a d i n g ,   a n d   s c a l i n g   r e s o u r c e s   o n   d e m a n d ,   w i t h o u t   t a k i n g   y o u r   a p p l i c a t i o n s   o f f l i n e .   A K S   r e d u c e s   t h e   c o m p l e x i t y   a n d   o p e r a t i o n a l   o v e r h e a d   o f   m a n a g i n g   a   K u b e r n e t e s   c l u s t e r   b y   o f f l o a d i n g   m u c h   o f   t h a t   r e s p o n s i b i l i t y   t o   A z u r e .   A s   a   h o s t e d   K u b e r n e t e s   s e r v i c e ,   A z u r e   h a n d l e s   c r i t i c a l   t a s k s   l i k e   h e a l t h   m o n i t o r i n g   a n d   m a i n t e n a n c e   f o r   y o u .   A l s o ,   y o u   p a y   o n l y   f o r   t h e   a g e n t   n o d e s   w i t h i n   y o u r   c l u s t e r s ,   n o t   f o r   t h e   m a s t e r s .   A s   a   m a n a g e d   K u b e r n e t e s   s e r v i c e ,   A K S   p r o v i d e s :     A u t o m a t e d   K u b e r n e t e s   v e r s i o n   u p g r a d e s   a n d   p a t c h i n g     E a s y   c l u s t e r   s c a l i n g     S e l f - h e a l i n g   h o s t e d   c o n t r o l   p l a n e   ( m a s t e r s )     C o s t   s a v i n g s ;   p a y   o n l y   f o r   r u n n i n g   a g e n t   p o o l   n o t e s   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 7         C h a p t e r   1 1           A z u r e   H o s t i n g   R e c o m m e n d a t i o n s     W i t h   A z u r e   h a n d l i n g   t h e   m a n a g e m e n t   o f   t h e   n o d e s   i n   y o u r   A K S   c l u s t e r ,   y o u   n o   l o n g e r   n e e d   t o   p e r f o r m   m a n y   t a s k s   m a n u a l l y ,   l i k e   c l u s t e r   u p g r a d e s .   B e c a u s e   A z u r e   h a n d l e s   t h e s e   c r i t i c a l   m a i n t e n a n c e   t a s k s   f o r   y o u ,   A K S   d o e s n ' t   p r o v i d e   d i r e c t   a c c e s s   ( s u c h   a s   w i t h   S S H )   t o   t h e   c l u s t e r .     A z u r e   S e r v i c e   F a b r i c   S e r v i c e   F a b r i c   i s   a   g o o d   c h o i c e   i f   y o u r e   c r e a t i n g   a   n e w   a p p   o r   r e w r i t i n g   a n   e x i s t i n g   a p p   t o   u s e   a   m i c r o s e r v i c e   a r c h i t e c t u r e .   A p p s ,   w h i c h   r u n   o n   a   s h a r e d   p o o l   o f   m a c h i n e s ,   c a n   s t a r t   s m a l l   a n d   g r o w   t o   m a s s i v e   s c a l e   w i t h   h u n d r e d s   o r   t h o u s a n d s   o f   m a c h i n e s   a s   n e e d e d .   S t a t e f u l   s e r v i c e s   m a k e   i t   e a s y   t o   c o n s i s t e n t l y   a n d   r e l i a b l y   s t o r e   a p p   s t a t e ,   a n d   S e r v i c e   F a b r i c   a u t o m a t i c a l l y   m a n a g e s   s e r v i c e   p a r t i t i o n i n g ,   s c a l i n g ,   a n d   a v a i l a b i l i t y   f o r   y o u .   S e r v i c e   F a b r i c   a l s o   s u p p o r t s   W e b A P I   w i t h   O p e n   W e b   I n t e r f a c e   f o r   . N E T   ( O W I N )   a n d   A S P . N E T   C o r e .   C o m p a r e d   t o   A p p   S e r v i c e ,   S e r v i c e   F a b r i c   a l s o   p r o v i d e s   m o r e   c o n t r o l   o v e r ,   o r   d i r e c t   a c c e s s   t o ,   t h e   u n d e r l y i n g   i n f r a s t r u c t u r e .   Y o u   c a n   r e m o t e   i n t o   y o u r   s e r v e r s   o r   c o n f i g u r e   s e r v e r   s t a r t u p   t a s k s .   A z u r e   V i r t u a l   M a c h i n e s   I f   y o u   h a v e   a n   e x i s t i n g   a p p l i c a t i o n   t h a t   w o u l d   r e q u i r e   s u b s t a n t i a l   m o d i f i c a t i o n s   t o   r u n   i n   A p p   S e r v i c e   o r   S e r v i c e   F a b r i c ,   y o u   c o u l d   c h o o s e   V i r t u a l   M a c h i n e s   i n   o r d e r   t o   s i m p l i f y   m i g r a t i n g   t o   t h e   c l o u d .   H o w e v e r ,   c o r r e c t l y   c o n f i g u r i n g ,   s e c u r i n g ,   a n d   m a i n t a i n i n g   V M s   r e q u i r e s   m u c h   m o r e   t i m e   a n d   I T   e x p e r t i s e   c o m p a r e d   t o   A z u r e   A p p   S e r v i c e   a n d   S e r v i c e   F a b r i c .   I f   y o u r e   c o n s i d e r i n g   A z u r e   V i r t u a l   M a c h i n e s ,   m a k e   s u r e   y o u   t a k e   i n t o   a c c o u n t   t h e   o n g o i n g   m a i n t e n a n c e   e f f o r t   r e q u i r e d   t o   p a t c h ,   u p d a t e ,   a n d   m a n a g e   y o u r   V M   e n v i r o n m e n t .   A z u r e   V i r t u a l   M a c h i n e s   i s   I n f r a s t r u c t u r e - a s - a - S e r v i c e   ( I a a S ) ,   w h i l e   A p p   S e r v i c e   a n d   S e r v i c e   F a b r i c   a r e   P l a t f o r m - a s - a - S e r v i c e   ( P a a s ) .       Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 8         C h a p t e r   1 1           A z u r e   H o s t i n g   R e c o m m e n d a t i o n s       R e c o m m e n d a t i o n   S u m m a r y   S c e n a r i o   R e c o m m e n d a t i o n   S i m p l e   m o n o l i t h i c   a p p l i c a t i o n   A z u r e   A p p   S e r v i c e   B a s i c   T e s t i n g   S c e n a r i o s   A z u r e   A p p   S e r v i c e ,   A C I   M o n o l i t h i c   a p p   w i t h   c o m p l e x   s e r v e r   s e t u p   r e q u i r e m e n t s   A z u r e   V M   M i c r o s e r v i c e s   A r c h i t e c t u r e   A K S   o r   S e r v i c e   F a b r i c     L o g i c a l   P r o c e s s e s   I n d i v i d u a l   l o g i c a l   p r o c e s s e s   t h a t   c a n   b e   d e c o u p l e d   f r o m   t h e   r e s t   o f   t h e   a p p l i c a t i o n   m a y   b e   d e p l o y e d   i n d e p e n d e n t l y   t o   A z u r e   F u n c t i o n s   i n   a   s e r v e r l e s s   m a n n e r .   A z u r e   F u n c t i o n s   l e t s   y o u   j u s t   w r i t e   t h e   c o d e   y o u   n e e d   f o r   a   g i v e n   p r o b l e m ,   w i t h o u t   w o r r y i n g   a b o u t   t h e   a p p l i c a t i o n   o r   i n f r a s t r u c t u r e   t o   r u n   i t .   Y o u   c a n   c h o o s e   f r o m   a   v a r i e t y   o f   p r o g r a m m i n g   l a n g u a g e s ,   i n c l u d i n g   C # ,   F # ,   N o d e . j s ,   P y t h o n ,   a n d   P H P ,   a l l o w i n g   y o u   t o   p i c k   t h e   m o s t   p r o d u c t i v e   l a n g u a g e   f o r   t h e   t a s k   a t   h a n d .   L i k e   m o s t   c l o u d - b a s e d   s o l u t i o n s ,   y o u   p a y   o n l y   f o r   t h e   a m o u n t   o f   t i m e   y o u r   u s e ,   a n d   y o u   c a n   t r u s t   A z u r e   F u n c t i o n s   t o   s c a l e   u p   a s   n e e d e d .   D a t a   A z u r e   o f f e r s   a   w i d e   v a r i e t y   o f   d a t a   s t o r a g e   o p t i o n s ,   s o   t h a t   y o u r   a p p l i c a t i o n   c a n   u s e   t h e   a p p r o p r i a t e   d a t a   p r o v i d e r   f o r   t h e   d a t a   i n   q u e s t i o n .   F o r   t r a n s a c t i o n a l ,   r e l a t i o n a l   d a t a ,   A z u r e   S Q L   D a t a b a s e s   a r e   t h e   b e s t   o p t i o n .   F o r   h i g h   p e r f o r m a n c e   r e a d - m o s t l y   d a t a ,   a   R e d i s   c a c h e   b a c k e d   b y   a n   A z u r e   S Q L   D a t a b a s e   i s   a   g o o d   s o l u t i o n .     U n s t r u c t u r e d   J S O N   d a t a   c a n   b e   s t o r e d   i n   a   v a r i e t y   o f   w a y s ,   f r o m   S Q L   D a t a b a s e   c o l u m n s   t o   B l o b s   o r   T a b l e s   i n   A z u r e   S t o r a g e ,   t o   D o c u m e n t D B .   O f   t h e s e ,   D o c u m e n t D B   o f f e r s   t h e   b e s t   q u e r y i n g   f u n c t i o n a l i t y ,   a n d   i s   t h e   r e c o m m e n d e d   o p t i o n   f o r   l a r g e   n u m b e r s   o f   J S O N - b a s e d   d o c u m e n t s   t h a t   m u s t   s u p p o r t   q u e r y i n g .   T r a n s i e n t   c o m m a n d -   o r   e v e n t - b a s e d   d a t a   u s e d   t o   o r c h e s t r a t e   a p p l i c a t i o n   b e h a v i o r   c a n   u s e   A z u r e   S e r v i c e   B u s   o r   A z u r e   S t o r a g e   Q u e u e s .   A z u r e   S t o r a g e   B u s   o f f e r s   m o r e   f l e x i b i l i t y   a n d   i s   t h e   r e c o m m e n d e d   s e r v i c e   f o r   n o n - t r i v i a l   m e s s a g i n g   w i t h i n   a n d   b e t w e e n   a p p l i c a t i o n s .   A r c h i t e c t u r e   R e c o m m e n d a t i o n s   Y o u r   a p p l i c a t i o n s   r e q u i r e m e n t s   s h o u l d   d i c t a t e   i t s   a r c h i t e c t u r e .   T h e r e   a r e   m a n y   d i f f e r e n t   A z u r e   s e r v i c e s   a v a i l a b l e .   C h o o s i n g   t h e   r i g h t   o n e   i s   a n   i m p o r t a n t   d e c i s i o n .   M i c r o s o f t   o f f e r s   a   g a l l e r y   o f   r e f e r e n c e   a r c h i t e c t u r e s   t o   h e l p   i d e n t i f y   t y p i c a l   a r c h i t e c t u r e s   o p t i m i z e d   f o r   c o m m o n   s c e n a r i o s .   Y o u   m a y   f i n d   a   r e f e r e n c e   a r c h i t e c t u r e   t h a t   m a p s   c l o s e l y   t o   y o u r   a p p l i c a t i o n s   r e q u i r e m e n t s ,   o r   a t   l e a s t   o f f e r s   a   s t a r t i n g   p o i n t .   Evaluation Warning: The document was created with Spire.PDF for .NET
    1 0 9         C h a p t e r   1 1           A z u r e   H o s t i n g   R e c o m m e n d a t i o n s     F i g u r e   1 1 - 1   s h o w s   a n   e x a m p l e   r e f e r e n c e   a r c h i t e c t u r e .   T h i s   d i a g r a m   d e s c r i b e s   a   r e c o m m e n d e d   a r c h i t e c t u r e   a p p r o a c h   f o r   a   S i t e c o r e   c o n t e n t   m a n a g e m e n t   s y s t e m   w e b s i t e   o p t i m i z e d   f o r   m a r k e t i n g .     F i g u r e   1 1 - 1 .   S i t e c o r e   m a r k e t i n g   w e b s i t e   r e f e r e n c e   a r c h i t e c t u r e .     R e f e r e n c e s     A z u r e   H o s t i n g   R e c o m m e n d a t i o n s     A z u r e   S o l u t i o n   A r c h i t e c t u r e s   h t t p s : / / a z u r e . m i c r o s o f t . c o m / e n - u s / s o l u t i o n s / a r c h i t e c t u r e /       A z u r e   D e v e l o p e r   G u i d e   h t t p s : / / a z u r e . m i c r o s o f t . c o m / e n - u s / c a m p a i g n s / d e v e l o p e r - g u i d e /       W h a t   i s   A z u r e   A p p   S e r v i c e ?   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / a p p - s e r v i c e / a p p - s e r v i c e - v a l u e - p r o p - w h a t - i s       A z u r e   A p p   S e r v i c e ,   V i r t u a l   M a c h i n e s ,   S e r v i c e   F a b r i c   a n d   C l o u d   S e r v i c e s   C o m p a r i s o n   h t t p s : / / d o c s . m i c r o s o f t . c o m / e n - u s / a z u r e / a p p - s e r v i c e - w e b / c h o o s e - w e b - s i t e - c l o u d - s e r v i c e - v m       A z u r e   C o n t a i n e r   O p t i o n s   h t t p s : / / s o c i a l . t e c h n e t . m i c r o s o f t . c o m / w i k i / c o n t e n t s / a r t i c l e s / 5 1 4 6 5 . a z u r e - c o n t a i n e r - o p t i o n s . a s p x     Evaluation Warning: The document was created with Spire.PDF for .NET